Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы 1 курс 2 семестр / Курсовая / КР информатика 2 сем .docx
Скачиваний:
11
Добавлен:
15.01.2021
Размер:
73.77 Кб
Скачать
  1. Программный код

#include <iostream>

using namespace std; //чтобы каждый раз не писать std::

struct stack_element

{

float value;

stack_element *previous;

};

//функция, добавляющая новый элемент в список (стек). Элемент введенный пользователем в качестве первого на самом деле будет уже вторым, т.к первый мы создаем в main() с пустым адресом предыдущего

void paste(float VALUE, stack_element *&TOP)

{

stack_element *NewTOP = new stack_element;

NewTOP->value = VALUE

NewTOP->previous = TOP;

TOP = NewTOP;

}

//функция удаления одного верхнего (вершины, головы) элемента стека

void cut(stack_element *&TOP)

{

cout <<"\n";

float temp = TOP->value;

stack_element *cut_elem = TOP;

TOP = TOP->previous;

delete cut_elem;

cout <<"Deleting top-element = " << temp;

cout <<"\n";

}

//функция очистки стека - удаляет все элементы стека, кроме служебного - самого первого добавленного с пустым адресом

void clear(stack_element *&TOP

{

if (TOP->previous != 0)

{

cout <<"\n"<<"Clearing stack..."<<"\n"; //пишем, что делаем этой процедурой - чистим стек

stack_element *element = 0;

while (TOP->previous != 0

{

element = TOP

TOP = TOP->previous;

delete element

}

cout <<"done. Stack is empty"<<"\n"; //говорим, что стек очищен

}

else

{

cout <<"Stack is empty"<<"\n"; //говорим, что стек итак пуст

}

}

void show(stack_element *TOP)

{

cout <<"\n";

cout <<"Viewing stack data...";

if (TOP->previous != 0)

{

stack_element *element = TOP;

cout <<"\n";

while (element->previous != 0)

{

cout <<"(" << element->value << "),";

element = element->previous;

}

} else cout <<"\n" << "Stack is empty";

cout <<"\n";

}

int main(int argc, char** argv) {

int N; //Число элементов в список

float value; //Элементы вводимые в список

string c;

stack_element *HEAD = new stack_element;

HEAD->previous = 0;

cout << "------------ Stack (LIFO) implementation ------------ "<<"\n";

cout << "Enter command:"<<"\n"<<"e - exit,"<<"\n"<<"p - paste stack element,"<<"\n"<<"c - cut stack element,"<<"\n"<<"s - show stack,"<<"\n"<<"d - delete stack."<<"\n";

while (c!="x")

{

cout << "command> "; //выводим приглшение

cin >> c; //спрашиваем команду

if (c == "p") //ввели р

{

cout << "Enter the number of items to paste = ";

cin >> N; //Указали сколько элементов вводить в список

for (int i=0; i<N; i++)

{

cout << "element #" << i+1 << " = ";

cin >> value; //Ввод x с клавиатуры

paste(value,HEAD); //Добавление элемента в список путем передачи в функцию paste: value с клавиауры и указателя HEAD с адресом ячейки последнeго добавленного элемента - вершины (или головы)

}

}

else

if (c=="c")

{

cout << "Enter the number of items to cut = ";

cin >> N; //Указали сколько элементов удаляем

for (int i=0; i<N; i++)

{

if (HEAD->previous != 0) //если вершина не является самым первым служебным элементом с нулевым адресом в указателе

{

cut(HEAD); //то удаляем очередной i-элемент

}

else //если доудалялись до самого первого служебного элемента с нулевым адресом в указателе

{

cout <<"Stack is empty"<<"\n";//говорим, что стек пуст

i = N; //выходим из цикла досрочно

}

}

}

else

if (c=="s")

{

show(HEAD);

}

else

if (c=="d")

{

clear(HEAD);

}

else

if (c=="e")

{

c = "x";

if (HEAD->previous != 0) //если стек не пуст, то очищаем его перед выходом, кроме первого служебного элемента

{

clear(HEAD);

}

cout << "\n"<<"Bye!"<<"\n";

}

else

{

cout << "\n"<<"Bad command"<<"\n";

}

}

delete HEAD->previous; //удаляем служебный элемент, который может снова стать корнем в результате манипуляций со стеком

delete HEAD;//удаляем служебный элемент

cin.get();

cin.get();

return 0;

}