Форум программистов, компьютерный форум CyberForum.ru

Линейный список. Картотека - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
23.03.2013, 18:34     Линейный список. Картотека #1
Картотека:
Адрес
Номер
Тип

Для представления картотеки в ОП ПЭВМ воспользоваться структурой данных – ЛОС (линейный однонапр список). В программе предусмотреть:
- поиск элемента ЛоС по ключу;
- вставку элемента в ЛоС;
- удаление элемента из ЛоС;
- вывод картотеки на принтер.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
#define n 3
class los
{int b;
int numb;
char adres[20];
char tip[20];
los *next;
public:
static los*p;
void input();
void output();
void search();
void del();
void add();
};
los*los::p;
void los::input()
{los *r;
p=new los;
cout<<"\n Key 1: ";
cin>>p->b;
cout<<"\n № magazina 1: ";
cin>>p->numb;
cout<<"\n Adres 1: ";
gets(p->adres);
cout<<"\n Tip magazina 1: ";
gets(p->tip);
p->next = NULL;
r=p;
for(int i=0; i<n-1; i++)
{clrscr();
r = r->next;
r=new los;
cout<<"\n Key "<<(i+2)<<": ";
cin>>r->b;
cout<<"\n № magazina "<<(i+2)<<": ";
cin>>r->numb;
cout<<"\n Adres "<<(i+2)<<": ";
gets(r->adres);
cout<<"\n Tip magazina "<<(i+2)<<": ";
gets(r->tip);
r->next=NULL;
getch();
}
void los::output()
{clrscr();
lds *r;
r=p;
cout<<"\n"<<"ЪДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДї";
cout<<"\n"<<"і"<<setw(5)<<"Key"<<"і"<<setw(10)<<"Numb"<<"і"<<setw(15)<<"Adres"<<"і"<<setw(10)<<"Tip"<<"і";
cout<<"\n"<<"ГДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДґ";
while(r!=NULL)
{cout<<"\n"<<"і"<<setw(5)<<r->b<<"і"<<setw(10)<<r->numb<<"і"<<setw(15)<<r->adres<<"і"<<setw(10)<<r->tip<<"і";
r=r->next;}
cout<<"\n"<<"АДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДЩ";
getch();
}
void los::search()
 {clrscr();
  los *r;
  int key;
  cout<<"\n Vvedite kluch dlya poiska: ";
  cin>>key;
  r=p;
 
 while(r != NULL && r->b != key)
  r=r->next;
if(r->b==key)
{cout<<"\n"<<"ЪДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДї";
cout<<"\n"<<"і"<<setw(5)<<"Key"<<"і"<<setw(10)<<"Numb"<<"і"<<setw(15)<<"Adres"<<"і"<<setw(10)<<"Tip"<<"і";
cout<<"\n"<<"ГДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДґ";
  cout<<"\n"<<"і"<<setw(5)<<r->b<<"і"<<setw(10)<<r->numb<<"і"<<setw(10)<<r->adres<<"і"<<setw(10)<<r->tip<<"і";
  cout<<"\n"<<"АДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДЩ";
  }
else
 cout<<"\n Nichego ne najdeno.";
getch();
}
void los::del()
 
  
getch();
}
void lds::add()
{clrscr();
los *r;
los *ptr;
ptr=new los;
int key;
cout<<"\n Vvedite kluch elementa posle kotorogo dobavit' novij: ";
cin>>key;
r=p;
while(r != NULL && r->b != key)
r = r->next;
if(r->b == key)
   {if(r->next != NULL)
       {cout<<"\n Dobavlenie: ";
    cout<<"\n Vvedite kluch novogo magazina: ";
    cin>>ptr->b;
    cout<<"\n Vvedite number novogo magazina: ";
    cin>>ptr->numb;
    cout<<"\n Vvedite adres  novogo magazina: ";
    gets(ptr->adres);
    cout<<"\n Vvedite tip novogo magazina: ";
    gets(ptr->tip);
    ptr->next = r->next;
    r->next = ptr;
       }
    else
       {cout<<"\n Dobavlenie: ";
    cout<<"\n Vvedite kluch novogo magazina: ";
    cin>>ptr->b;
    cout<<"\n Vvedite number novogo magazina: ";
    cin>>ptr->numb;
    cout<<"\n Vvedite adres  novogo magazina: ";
    gets(ptr->adres);
    cout<<"\n Vvedite tip novogo magazina: ";
    gets(ptr->tip);
    ptr->next=NULL;
    r->next=ptr;
       }
   }
getch();
}
void menu()
{clrscr();
cout<<"\n 1-Vvod dannih";
cout<<"\n 2-Vivod dannih";
cout<<"\n 3-Poisk dannih po kluchu";
cout<<"\n 4-Udalenie dannih po kluchu";
cout<<"\n 5-Vstavka dannih posle elementa";
cout<<"\n ESC-vihod iz programmi";
}
void main()
{clrscr();
 char punkt;
 while(punkt!=27)
 {menu();
  punkt=getch();
  clrscr();
  switch(punkt)
  {case '1':input();getch;break;
   case '2':output();getch;break;
   case '3':search();getch();break;
   case '4':del();getch();break;
   case '5':add();getch();break;
  }
 }
}
Вот собственно код.Не могу сделать удаление и добавление.А из 3 магазинов выводится только первый .Помогите пожалкйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 18:34     Линейный список. Картотека
Посмотрите здесь:

C++ Линейный список
C++ Линейный список.
C++ Линейный список
C++ [C++] Линейный список
Линейный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:24     Линейный список. Картотека #21
евг, покажи сначала как ты делаешь класса.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:31  [ТС]     Линейный список. Картотека #22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
#define n 3
class los
{int b;
int numb;
char adres[30];
char tip[20];
los *next;
 
public:
static los*p;
void input();
void output();
void search();
void del();
void add();
 
};
los*los::p;
void los::input()
{los *r;
clrscr();
p=new los;
cout<<"\n Key 1: ";
cin>>p->b;
cout<<"\n number magazina 1: ";
cin>>p->numb;
cout<<"\n Adres 1: ";
gets(p->adres);
cout<<"\n Tip magazina 1: ";
gets(p->tip);
r=p;
for(int i=1; i<n; i++)
{clrscr();
r->next=new los;
r=r->next;
cout<<"\n Key "<<(i+1)<<": ";
cin>>r->b;
cout<<"\n number magazina "<<(i+1)<<": ";
cin>>r->numb;
cout<<"\n Adres "<<(i+1)<<": ";
gets(r->adres);
cout<<"\n Tip magazina "<<(i+1)<<": ";
gets(r->tip);
}
r->next=NULL;
return numb;
getch();
}
void los::output()
{clrscr();
los *r;
r=p;
cout<<"\n"<<"ЪДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї";
cout<<"\n"<<"і"<<setw(5)<<"Key"<<"і"<<setw(8)<<"Numb"<<"і"<<setw(30)<<"Adres"<<"і"<<setw(20)<<"Tip"<<"і";
cout<<"\n"<<"ГДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДґ";
while(r!=NULL)
{cout<<"\n"<<"і"<<setw(5)<<r->b<<"і"<<setw(8)<<r->numb<<"і"<<setw(30)<<r->adres<<"і"<<setw(20)<<r->tip<<"і";
r=r->next;
}
cout<<"\n"<<"АДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ";
getch();
}
void los::search()
 {clrscr();
  los *r;
  int key;
  cout<<"\n Vvedite kluch dlya poiska: ";
  cin>>key;
  r=p;
 
 while(r != NULL && r->b!= key)
  r=r->next;
if(r!=NULL && r->b==key)
{cout<<"\n"<<"ЪДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї";
cout<<"\n"<<"і"<<setw(5)<<"Key"<<"і"<<setw(8)<<"Numb"<<"і"<<setw(30)<<"Adres"<<"і"<<setw(20)<<"Tip"<<"і";
cout<<"\n"<<"ГДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДґ";
  cout<<"\n"<<"і"<<setw(5)<<r->b<<"і"<<setw(8)<<r->numb<<"і"<<setw(30)<<r->adres<<"і"<<setw(20)<<r->tip<<"і";
  cout<<"\n"<<"АДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ";
  }
else
 cout<<"\n Nichego ne najdeno.";
getch();
}
Добавлено через 36 секунд
это вот ввол,вывод и поиск

Добавлено через 2 минуты
все работает.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:33     Линейный список. Картотека #23
евг, ты меня запутал, что не так?
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:36  [ТС]     Линейный список. Картотека #24
не могу сделать удаление.Ваша первая процедура с удалением последней строчки работает.я ее переделал под борланд.удаление по ключу не могу сделать из-за метода getNumber.то что я скидывал выше,это удаление из моего проекта по лдс.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:42     Линейный список. Картотека #25
евг, покажите мне неработающую функцию и как вы описали get.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:46  [ТС]     Линейный список. Картотека #26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void los::del()
{clrscr();
 
int  value;
int fl=0;
los *r;los *ptr;los *cur;los *tmp;
 
cur=r;
if (value==r->getNumber())
{
tmp=r->next;
delete(r);
r=tmp;
}
else
{
tmp=NULL;
fl=0;
while(cur!=NULL)
  {
    if (cur->getNumber==value)
      {
    fl=1;
    break;
      }
   tmp=cur;
   cur=cur->next;
  }
  if(!fl)
    cout<<"\n Card not found";
  else
  {
   tmp->next=cur->next;
   delete(cur);
  }
 }
}
Ну по идее ее надо в input вставлять
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void los::input()
{los *r;
clrscr();
p=new los;
cout<<"\n Key 1: ";
cin>>p->b;
cout<<"\n number magazina 1: ";
cin>>p->numb;
cout<<"\n Adres 1: ";
gets(p->adres);
cout<<"\n Tip magazina 1: ";
gets(p->tip);
r=p;
for(int i=1; i<n; i++)
{clrscr();
r->next=new los;
r=r->next;
cout<<"\n Key "<<(i+1)<<": ";
cin>>r->b;
cout<<"\n number magazina "<<(i+1)<<": ";
cin>>r->numb;
cout<<"\n Adres "<<(i+1)<<": ";
gets(r->adres);
cout<<"\n Tip magazina "<<(i+1)<<": ";
gets(r->tip);
}
r->next=NULL;
 
 
int getNumber
{
return numb;
}
 
getch();
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:50     Линейный список. Картотека #27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class los
{int b;
int numb;
char adres[30];
char tip[20];
los *next;
public:
static los*p;
void input();
void output();
void search();
void del();
int getNumber();
void add();
}
get должна быть вот где
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:56  [ТС]     Линейный список. Картотека #28
а где возвращать значение?

Добавлено через 4 минуты
я поставил перед del
C++
1
2
3
4
5
6
int getNumber()
{ 
   return numb;
}
 
void los::del()
Он орет undefined symbol 'numb'
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:57     Линейный список. Картотека #29
евг, ниже класса сделай так

C++
1
2
3
4
int los::getNumber()
{
      return number;
}
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 20:05  [ТС]     Линейный список. Картотека #30
эта штука заработала.но все равно удаление ничего не показывает.оно тупо виснет=(
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 20:08     Линейный список. Картотека #31
евг, ну скорее всего оно зацикливается, значит куда-то не туда переправляешь указатель... сейчас покажи что у тебя в функции удаления.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 20:52  [ТС]     Линейный список. Картотека #32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void los::del()
{clrscr();
cout<<"\n numb"<<numb;
int  value;
int fl=0;
los *r;los *ptr;los *cur;los *tmp;
 
cur=r;
if (value==r->getNumber())
{
tmp=r->next;
delete(r);
r=tmp;
}
else
{
tmp=NULL;
fl=0;
while(cur!=NULL)
  {
    if (cur->getNumber()==value)
      {
    fl=1;
    break;
      }
   tmp=cur;
   cur=cur->next;
  }
  if(!fl)
    cout<<"\n Card not found";
  else
  {
   tmp->next=cur->next;
   delete(cur);
  }
 }
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 20:58     Линейный список. Картотека #33
евг, ответь мне что это такое
Цитата Сообщение от евг Посмотреть сообщение
los *r;
? Если это голова списка, тогда понятно почему не работает.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 20:59  [ТС]     Линейный список. Картотека #34
ну да подразумевалось что голова.а что должно быть?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 21:01     Линейный список. Картотека #35
евг, а чем она у вас инициализирована? вы же заново ее объявляете...
Цитата Сообщение от евг Посмотреть сообщение
void los::input()
{los *r
вот из той функции нужно передавать голову в delete.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 21:04  [ТС]     Линейный список. Картотека #36
да.....а каким образом?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 21:05     Линейный список. Картотека #37
евг, лучше сделать его в классе как приват, и можно тогда его использовать не объявляя в методах класса.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 21:08  [ТС]     Линейный список. Картотека #38
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
#define n 3
class los
{int b;
int numb;
char adres[20];
char tip[20];
los *next;
los *r:
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 21:11     Линейный список. Картотека #39
евг, да
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 21:15     Линейный список. Картотека
Еще ссылки по теме:

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке C++
Линейный список C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 21:15  [ТС]     Линейный список. Картотека #40
Вы знаете,а удаление по ключу разве не подразумевает собой ввод ключа сначала?
Yandex
Объявления
24.03.2013, 21:15     Линейный список. Картотека
Ответ Создать тему
Опции темы

Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru