1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| #include <iostream>
using namespace std;
struct List
{
int x; //информационный элемент
List *Next,*Head; //Голова стека и указатель на следующий элемент
} list_t;
struct List2
{
int x2; //информационный элемент
List2 *Next2,*Head2; //Голова стека и указатель на следующий элемент
};
struct List3
{
int x3; //информационный элемент
List3 *Next3,*Head3; //Голова стека и указатель на следующий элемент
};
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК (в список LIFO)*/
void Add(int x, List *&MyList) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
List *temp=new List; //Выделяем память для нового элемента
temp->x=x; //Записываем в поле x принимаемый в функцию элемент x
temp->Next=MyList->Head; //Указываем, что следующий элемент это предыдущий
MyList->Head=temp; //Сдвигаем голову на позицию вперед
}
void Add2(int x2, List2 *&MyList2) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
List2 *temp2=new List2; //Выделяем память для нового элемента
temp2->x2=x2; //Записываем в поле x принимаемый в функцию элемент x
temp2->Next2=MyList2->Head2; //Указываем, что следующий элемент это предыдущий
MyList2->Head2=temp2; //Сдвигаем голову на позицию вперед
}
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ СТЕКА*/
void Show(List *MyList) //Нужен только сам стек
{
List *temp=MyList->Head; //Объявляем указатель и Указываем ему, что его позиция в голове стека
//с помощью цикла проходим по всему стеку
while (temp!=NULL) //выходим при встрече с пустым полем
{
cout<<temp->x<<" "; //Выводим на экран элемент стека
temp=temp->Next; //Переходим к следующему элементу
}
}
void Show2(List2 *MyList2) //Нужен только сам стек
{
List2 *temp2=MyList2->Head2; //Объявляем указатель и Указываем ему, что его позиция в голове стека
//с помощью цикла проходим по всему стеку
while (temp2!=NULL) //выходим при встрече с пустым полем
{
cout<<temp2->x2<<" "; //Выводим на экран элемент стека
temp2=temp2->Next2; //Переходим к следующему элементу
}
}
/*ФУНКЦИЯ УДАЛЕНИЯ СТЕКА ИЗ ПАМЯТИ*/
void ClearList(List *MyList)
{
while (MyList->Head!=NULL) //Пока по адресу не пусто
{
List *temp=MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
delete MyList->Head; //Освобождаем адрес обозначающий начало
MyList->Head=temp; //Меняем адрес на следующий
}
}
void ClearList2(List2 *MyList2)
{
while (MyList2->Head2!=NULL) //Пока по адресу не пусто
{
List2 *temp2=MyList2->Head2->Next2; //Временная переменная для хранения адреса следующего элемента
delete MyList2->Head2; //Освобождаем адрес обозначающий начало
MyList2->Head2=temp2; //Меняем адрес на следующий
}
}
int main()
{int t,t2,n,n2;
List *MyList=new List; //Выделяем память для стека
MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
cout<<"pervii stek"<<endl;
cout<<"vvedite razmer pervogo steka"<<endl;
cin>>n;
for (int i=0;i<n;i++)
{ cout<<"element"<<i+1 << endl;
cin>>t; ;Add(t,MyList);} //Заносим данные в стек
Show(MyList); //Выводим стек на экран
List2 *MyList2=new List2; //Выделяем память для стека
MyList2->Head2=NULL; //Во избежание ошибок инициализируем первый элемент
cout<<endl;
cout<<"vtoroi stek"<<endl;
cout<<"vvedite razmer vtorogo steka"<<endl;
for (int i=0;i<10;i++)
{ cout<<"element"<<i+1 << endl;
cin>>t2; Add2(t2,MyList2);} //Заносим данные в стек 2
Show2(MyList2); //Выводим стек2 на экран
ClearList(MyList); //Очищаем память.
delete MyList->Head;
delete MyList;
ClearList2(MyList2); //Очищаем память.
delete MyList2->Head2;
delete MyList2;
system("pause");
} |