Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
9
Добавлен:
22.09.2019
Размер:
812.03 Кб
Скачать

If (!q) //...И он первый в списке

{

DelFirst(First);

p = First; //p снова установить на начало

}

else //...а если он не первый в списке

{

DelAfter(q);

p = q;

}

else

{

q = p;

p = p->Next; //идем по списку

}

}

void main()

{

PNode First = NULL;

InputList(First);

PrintList(First);

cout<<"Введите значение для вставки: ";

int Data;

cin>>Data;

FindIns(First, Data);

PrintList(First);

cout<<"Введите значение для удаления: ";

cin>>Data;

FindDel(First, Data);

PrintList(First);

}

3.2 Стек

С тек – структура данных с односторонним доступом (рисунок 3.6). Стек является одной из наиболее употребляемых структур данных, которая оказывается весьма удобной при решении различных задач.

Стек работает по принципу LIFO (Last in – first out; последним пришел – первым ушел).

Особенностью стека является то, что в каждый момент времени доступен только один элемент, который находится в конце стека – вершине стека (Top).

Операции над стеками:

  1. Занесение элемента в стек – Push

  1. Выборка элемента из стека – Pop

  1. Определение пустоты стека – Empty

  1. Прочтение элемента без его выборки из стека – StackTop

  2. Запись элемента – PutItem

При «добавлении элемента» новое значение добавляется в конец стека. При выполнении операции «взять элемент» – извлекается из него. Операции «прочитать элемент» и «записать элемент» работают с вершиной стека. Операции Push и Pop соответствуют операциям добавления и удаления первого элемента списка соответственно.

При выполнении операции выборки из стека целесообразно осуществить проверку на пустоту стека.

Пример реализации и работы со стеком.

В данном примере реализованы основные операции работы со стеком целых чисел. В основной программе происходит заполнение стека, затем извлечение и вывод его элементов на экран.

#include <iostream.h>

//описание структуры элемента стека

struct Element

{

int Item;

Element* Next;

};

//указатель на вершину стека

Element* TopPointer;

//проверка стека на пустоту

int IsEmpty()

{

return (!TopPointer);

}

//чтение вершины без ее извлечения из стека

void Get(int& Item)

{

if (!TopPointer)

cout<<"Стек пуст!\n";

else

Item = TopPointer->Item;

}

//изменение значения вершины без ее извлечения из стека

void Put(int Item)

{

if (!TopPointer)

cout<<"Стек пуст!\n";

else

TopPointer->Item = Item;

}

//добавление элемента в стек

//(аналогично вставке в начало списка)

void Push(int Item)

{

Element* temp; //временный указатель

temp = new Element;

temp->Item = Item;

temp->Next = TopPointer;

TopPointer = temp;

}

//извлечение элемента из стека

//(аналогично удалению из начала списка)

void Pop(int& Item)

{

if (!TopPointer)

cout<<"Стек пуст!\n";

else

{

Element* temp; //временный указатель

Item = TopPointer->Item;

temp = TopPointer->Next;

delete TopPointer; //освобождение памяти

TopPointer = temp;

}

}

void main()

{

int i;

//заполнение стека

do

{

cout<<"Введите элемент (0 - конец ввода): ";

cin>>i;

if (i!=0)

Push(i);

}

while (i!=0); //до тех пор, пока не введен 0

//печать стека

while (!IsEmpty())

{

Pop(i);

cout<<i<<' ';

}

}