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

С++ для начинающих

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

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

23.03.2013, 18:34. Просмотров 1953. Ответов 60
Метки нет (Все метки)

Картотека:
Адрес
Номер
Тип

Для представления картотеки в ОП ПЭВМ воспользоваться структурой данных – ЛОС (линейный однонапр список). В программе предусмотреть:
- поиск элемента ЛоС по ключу;
- вставку элемента в ЛоС;
- удаление элемента из ЛоС;
- вывод картотеки на принтер.
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++
Есть такая детская считалка: n детей стали в круг. Начиная отсчет от первого, убирают каждого k-го ребёнка, замыкая круг после каждого...

Линейный список - C++
Текст помощи организовано как линейный список. каждая компонента текста помощи содержит пояснение к этому термину. Составить программу...

Линейный список - C++
Нужно написать курсовую по с++, не используя стандартных методов. Подскажите пожалуйста, с чего начать? Текст допомоги для деякої...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:03  [ТС] #16
огромное спасибо!

Добавлено через 4 часа 46 минут
а как реализовать процедуру getNumber() в классе?
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:10 #17
евг, да так же она и будет выглядеть, обычно get-функции делают как методы классов
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:11  [ТС] #18
просто мне эту лабуду мне надо делать в Borland 3.1 так он ругается на этот метод
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.03.2013, 19:16 #19
евг, странно, я с борландом не работал... но вообще он не должен ругаться, а что пишет?
евг
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 154
24.03.2013, 19:21  [ТС] #20
ну пишет что не может определить процедуру в классе.

Добавлено через 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
void lds::del()
{clrscr();
lds *r;lds *ptr;
int key;
cout<<"\n Vvedite kluch elementa dlya udaleniya";
cin>>key;
r=p;
while(r!=NULL&&r->b!=key)
r=r->next;
if(r->b==key)
{if(r->prev!=NULL&&r->next!=NULL) //Проверка что элемент не первый и не последний
{ptr=r->next;
r->prev->next = r->next;          //удаляем информацию предыдущего о текущем, заменой на инфу о следующем
r->next->prev = r->prev;          //следующего о текущем заменой на предыдущий
delete(r);                        //удаляем текущий
r=ptr;}
else
    {if(r->prev==NULL)            //проверка на первый элемент
       {p=p->next;                //меняем наш P на следующий
    delete(r);                //удаляем текущий элемент
    p->prev=NULL;             //удаляем инфу о предыдущем элементе(из следующего)
    r=p;                      //меняем текущий на следующий
       }
     else
    {r->prev->next=NULL;      //удаляем инфу предыдущего элемента о его следущем(о текущем)
     delete(r);               //удаляем текущий элемент
     r=p;
    }
    }
ну вот это например удаление в лдс.ну тут понятно-здесь есть следующий и предыдущий.а как это сделать в ЛОСе?
yoghurt92
374 / 345 / 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
374 / 345 / 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
374 / 345 / 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
374 / 345 / 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
374 / 345 / 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
эта штука заработала.но все равно удаление ничего не показывает.оно тупо виснет=(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 20:05
Привет! Вот еще темы с ответами:

Линейный двусвязный список - C++
Задали задачу, реализовать линейный двусвязный список, и функцию к нему - удаление узла. Читал литературу, правда в спешке, искал по форуму...

Линейный список. Язык С. - C++
Здравствуйте. Помогите пожалуйста доделать программу. Условие. Картинная выставка организована в виде линейного списка. Каждая компонента...

Линейный двунаправленный список - C++
Есть такое задание: Линейный двунаправленный список, упорядоченный по возрастанию. Я реализовал Линейный однонаправленный список,...

Линейный однонаправленный список - C++
Есть программа, которая инициализирует, заполняет и удаляет список. При компиляции появляется ошибка, что c и m в функции main() не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2013, 20:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru