Очередь, реализация при помощи списков и операции над ними
Download 180.59 Kb.
|
Вывод списка.Функция PrintList выводит на экран все элементы списка: void PrintList() { if (head==NULL) cout<<"Список пуст\n"; else { DoubleList *a=head; cout<<"\nЭлементы списка: "; do { cout< a=a->next; } while(a!=head); cout<<"\n\n"; } } Вывести список можно и посредством цикла, то есть итеративно. Теперь соединим эти три функции в одной программе. Если в качестве языка использовался бы Pascal, то для функционирования программы (в нашем случае интерфейса двусвязного списка) пришлось, помимо функций (процедур), написать основной блок программы (begin…end), из которого вызывались бы подпрограммы. В C++ этим блоком является функция main. Программа, реализующая простой интерфейс двусвязного списка: #include "stdafx.h" #include using namespace std; struct DoubleList //описание узла списка { int data; //информационное поле DoubleList *next; //указатель на следующий элемент DoubleList *prev; //указатель на предыдущий элемент }; DoubleList *head; //указатель на первый элемент списка //**********************ДОБАВЛЕНИЕ ЭЛЕМЕНТА********************** void AddList(int value, int position) { DoubleList *node=new DoubleList; //создание нового элемента node->data=value; //присвоение элементу значения if (head==NULL) //если список пуст { node->next=node; //установка указателя next node->prev=node; //установка указателя prev head=node; //определяется голова списка } else { DoubleList *p=head; for(int i=position; i>1; i--) p=p->next; p->prev->next=node; node->prev=p->prev; node->next=p; p->prev=node; } cout<<"\nЭлемент добавлен...\n\n"; } //***********************УДАЛЕНИЕ ЭЛЕМЕНТА*********************** int DeleteList(int position) { if (head==NULL) { cout<<"\nСписок пуст\n\n"; return 0; } if (head==head->next) { delete head; head=NULL; } else { DoubleList *a=head; for (int i=position; i>1; i--) a=a->next; if (a==head) head=a->next; a->prev->next=a->next; a->next->prev=a->prev; delete a; } cout<<"\nЭлемент удален...\n\n"; } //*************************ВЫВОД СПИСКА************************* void PrintList() { if (head==NULL) cout<<"\nСписок пуст\n\n"; else { DoubleList *a=head; cout<<"\nЭлементы списка: "; do { cout< a=a->next; } while(a!=head); cout<<"\n\n"; } } //************************ГЛАВНАЯ ФУНКЦИЯ************************ void main() { setlocale(LC_ALL, "Rus"); int value, position, x; do { cout<<"1. Добавить элемент"< switch (x) { case 1: cout<<"Значение > "; cin>>value; cout<<"Позиция > "; cin>>position; AddList(value, position); break; case 2: cout<<"Позиция > "; cin>>position; DeleteList(position); break; case 3: PrintList(); break; } } while (x!=0); } От программы требуется, чтобы она выполнялась до тех пор, пока не выполнен выход из цикла do функции main (для выхода из него пользователь должен ввести 0). По этой причине в конце функции main не был описан оператор, тормозящий программу. Очередь в программировании используется, как и в реальной жизни, когда нужно совершить какие-то действия в порядке их поступления, выполнив их последовательно. Примером может служить организация событий в Windows. Когда пользователь оказывает какое-то действие на приложение, то в приложении не вызывается соответствующая процедура (ведь в этот момент приложение может совершать другие действия), а ему присылается сообщение, содержащее информацию о совершенном действии, это сообщение ставится в очередь, и только когда будут обработаны сообщения, пришедшие ранее, приложение выполнит необходимое действие. Download 180.59 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling