|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.06.2010, 08:27 | #1 |
Новичок
Джуниор
Регистрация: 07.06.2010
Сообщений: 1
|
Циклический связный список
Добрый день.
Преподователь просит реализовать очередь на базе циклического связного списка(последний элемент указывает на первый ) . Те реализовать функцию добвления, удаления и просмотра списка ,причём с помощью использования указателя последний элемент. Не понимаю как это сделать. Подскажите пожалуйста. Вот как сделал я но этот вариант ему не понравился. //=================================== ============= #include <iostream> #include <windows.h> #include <conio.h> using namespace std; //=================================== ============= struct list { int data; list *next; }; list *first = 0; int count = 0; //=================================== ============= char *rus(char *source) { char *res = new char[strlen(source)]; CharToOemA(source, res); return res; } //=================================== ============= void add(int a) { list *newlist = new list; newlist->data = a; list *temp = first; if(first) { int n =1; while(n<count) { first=first->next; n++; } first->next = newlist; first=first->next; first->next = temp; first=first->next; } else { first = newlist; first->next = first; } count++; } //=================================== ============= void del(int n) { cout<<endl; list *temp = first; if(n>=count) return; if(n == 1) { n = count+1; first = first ->next; } n--; if(count>1) { while(n>1) { temp=temp->next; n--; } cout<<rus("Óäàëÿåìûé ýëåìåíò : ")<<temp->next->data; list *delelem = temp->next; temp->next=temp->next->next; delete delelem; count--; } else { delete temp; temp=0; count--; } } //=================================== ============= void show() { list *temp = first; int i =1; cout<<endl; if(count == 0) { cout<<rus("\nÑïèñîê ïóñò\n"); return; } while(i<=count) { cout<<rus("Ýëåìåíò ¹ ")<<i++<<" "<<temp->data<<endl; temp=temp->next; } } //=================================== ============= int main() { int tmp; char key; do { cout<<rus("\nÂûáåðèòå äåéñòâèå.\n1.Äîáàâèòü ýëåìåíò\n2.Óäàëèòü ýëåìåíò\n3.Ïîêàçàòü ñïèñîê\n4.Âûõîä"); key = getch(); switch(key) { case '1': cout<<rus("\nÂâåäèòå ýëåìåíò :"); cin>>tmp; add(tmp); break; case '2': cout<<rus("\nÂâåäèòå íîìåð ýëåìåíòà :"); cin>>tmp; del(tmp); break; case '3': show(); break; }; }while(key!='4'); return 0; } //=================================== ============= |
08.06.2010, 20:28 | #2 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 46
|
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Циклический сдвиг в С | rand8154 | Общие вопросы C/C++ | 1 | 14.11.2009 01:49 |
Циклический сдвиг | Mish92(21-09) | Помощь студентам | 0 | 07.11.2009 21:59 |
Циклический список на С++ | Йэжиг | Общие вопросы C/C++ | 1 | 12.10.2009 22:42 |
Инвертировать связный список | levandowskiy | Общие вопросы C/C++ | 2 | 21.08.2009 15:20 |
Как заполнить связный список? | levandowskiy | Общие вопросы C/C++ | 1 | 18.08.2009 09:00 |