Приложение 6. Программа, имитирующая интерфейс стека, основанного на базе статического массива.
|
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
|
#include "stdafx.h"
#include <iostream>
using namespace std;
const int n=3;
struct Stack
{
int A[n];
int count;
};
//создание стека
void Creation(Stack *p)
{ p->count=0; }
//проверка стека на пустоту
int Full(Stack *p)
{
if (p->count==0) return 1;
else if (p->count==n) return -1;
else return 0;
}
//добавление элемента
void Add(Stack *p)
{
int value;
cout<<"Введите элемент > "; cin>>value;
p->A[p->count]=value;
p->count++;
}
//удаление элемента
void Delete(Stack *p)
{ p->count--; }
//вывод верхнего элемента
int Top(Stack *p)
{ return p->A[p->count-1]; }
//размер стека
int Size(Stack *p)
{ return p->count; }
//главная функция
void main()
{
setlocale(LC_ALL,"Russian");
Stack s;
Creation(&s);
char number;
do
{
cout<<"1. Добавить элемент"<<endl;
cout<<"2. Удалить элемент"<<endl;
cout<<"3. Вывести верхний элемент"<<endl;
cout<<"4. Узнать размер стека"<<endl;
cout<<"0. Выйти"<<endl;
cout<<"Номер команды > "; cin>>number;
switch (number)
{
case '1':
if (Full(&s)==-1) cout<<endl<<"Стек заполнен\n\n";
else
{
Add(&s);
cout<<endl<<"Элемент добавлен в стек\n\n";
} break;
//-----------------------------------------------
case '2':
if (Full(&s)==1) cout<<endl<<"Стек пуст\n\n";
else
{
Delete(&s);
cout<<endl<<"Элемент удален из стека\n\n";
} break;
//-----------------------------------------------
case '3':
if (Full(&s)==1) cout<<endl<<"Стек пуст\n\n";
else cout<<"\nВерхний элемент: "<<Top(&s)<<"\n\n";
break;
//-----------------------------------------------
case '4':
if (Full(&s)==1) cout<<endl<<"Стек пуст\n\n";
else cout<<"\nРазмер стека: "<<Size(&s)<<"\n\n";
break;
//-----------------------------------------------
case '0': break;
default: cout<<endl<<"Команда не определена\n\n";
break;
}
} while(number!='0');
system("pause");
}
|
Приложение 7. Программа, имитирующая интерфейс стека, основанного на базе статического массива.
|
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
|
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
//главная функция
void main()
{
setlocale(LC_ALL,"Russian");
stack <int> S; //создание стека S типа int
char number; int value;
do
{
cout<<"1. Добавить элемент"<<endl;
cout<<"2. Удалить элемент"<<endl;
cout<<"3. Получить верхний элемент"<<endl;
cout<<"4. Узнать размер стека"<<endl;
cout<<"0. Выйти"<<endl;
cout<<"Номер команды > "; cin>>number;
switch (number)
{
case '1': //добавление элемента
cout<<"Значение > "; cin>>value;
S.push(value); cout<<endl<<"Элемент добавлен в стек\n\n";
break;
//-----------------------------------------------
case '2': //удаление элемента
if (S.empty()==true) cout<<"\nСтек пуст\n\n";
else
{
S.pop(); cout<<endl<<"Элемент удален из стека\n\n";
} break;
//-----------------------------------------------
case '3': //вывод верхнего элемента
if (S.empty()==true) cout<<"\nСтек пуст\n\n";
else cout<<"\nВерхний элемент стека: "<<S.top()<<"\n\n";
break;
//-----------------------------------------------
case '4': //вывод размера стека
if (S.empty()==true) cout<<"\nСтек пуст\n\n";
else cout<<"\nРазмер стека: "<<S.size()<<"\n\n";
break;
//-----------------------------------------------
case '0': break; //выход
default: cout<<endl<<"Команда не определенная\n\n";
break;
}
} while(number!='0');
system("pause");
}
|
Приложение 8. Программа, реализующая простой интерфейс двусвязного списка:
|
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
|
#include "stdafx.h"
#include <iostream>
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->data<<" ";
a=a->next;
} while(a!=head); cout<<"\n\n";
}
}
//************************ГЛАВНАЯ ФУНКЦИЯ************************
void main()
{
setlocale(LC_ALL, "Rus");
int value, position, x;
do
{
cout<<"1. Добавить элемент"<<endl;
cout<<"2. Удалить элемент"<<endl;
cout<<"3. Вывести список"<<endl;
cout<<"0. Выйти"<<endl;
cout<<"\nНомер операции > "; cin>>x;
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);
}
|