Стек. Реализация при помощи списков и операции над ними
Программная реализация списка
Download 123.81 Kb.
|
Министерство по развитию информационных технологий и коммуникаций
- Bu sahifa navigatsiya:
- Добавление элемента.
- Удаление элемента.
Программная реализация списка.На примере двусвязного списка, разберем принцип работы этой структуры данных. При реализации списка удобно использовать структуры (в Pascal - записи). Общая форма описания узла двунаправленного связного списка и указателя на первый элемент списка: struct имя_списка { информационное_поле_1; информационное_поле_2; … информационное_поле_n; указатель_на_следующий_элемент; указатель_на_предыдущий_элемент; }; имя_списка *указатель_на_голову_списка; Пример: struct DoubleList //описание узла списка { int data; //информационное поле DoubleList *next; //указатель на следующий элемент DoubleList *prev; //указатель на предыдущий элемент }; DoubleList *head; //указатель на первый элемент списка Теперь, предполагая, что описан узел и указатель на голову списка (см. пример выше), напишем функции обработки связного списка. Добавление элемента.Опишем функцию AddList, которая в качестве параметров принимает значение и адрес будущего узла, после чего создает его в списке: 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"; } Удаление элемента.Функция DeleteList для удаления элемента использует его адрес: 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"; } Если список пуст, то выводится сообщение, извещающее об этом, и функция возвращается в место вызова. Download 123.81 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling