НГТУ
Кафедра прикладной математики
Группа: ПМ-33
Выполнила:
Проверила: Еланцева И Л
Написать операции работы с заданной структурой данных, включив их в один модуль (файл). К основным операциям (очистить стек ,добавить элемент , удалить элемент, проверить пуст ли стек) добавить операцию, показывающую содержимое структуры после выполнения какого либо действия с ней. Эту операцию реализовать на основе базовой операции: основные операции над динамическим стеком
Дано: стек S
Результат: стек S после выполнения над ним операций.
Анализ
Для начала определим, что такое стек. Стек – это список, у которого доступен один элемент (одна позиция). Этот элемент называется вершиной стека. Взять элемент можно только из вершины стека, добавить элемент можно только в вершину стека.
Стек может быть реализован как в статической памяти, так и в динамической. В нашем варианте мы реализуем понятие динамического стека, представляемого линейным односвязным списком.
|
|
|
В стеке, представленном линейным односвязным списком, вершина стека – первый элемент списка.
Определим теперь основные операции над стеком.
1. Взять элемент из стека.
Взять элемент из стека можно, только если он не пуст. Тогда операция взятия элемента заключается в запоминании значения головного элемента списка. Затем сдвиге указателя стека на следующий элемент и удалении предыдущего элемента. Алгоритм удаления можно записать так:
S – Вершина стека
X = значение S
T = S
S = след. за S элемент
Удалить элемент Т
Х – результат
2. Положить элемент в стек
Для добавления элемента в стек необходимо создать новый элемент стека, затем записать в его информационное поле нужное значение, а затем организовать ссылочное поле на вершину стека. Затем нам остается только установить вершину стека на вновь созданный элемент. Алгоритм добавления выглядит так:
S – Вершина стека
X – элемент который необходимо добавить
N = новый элемент типа стек
Информационное поле N = X
След. элемент за N = S
S = N
3. Проверить пусти ли стек
Для проверки пустоты стека достаточно проверить его вершину на указатель в никуда, т.е. на равенство NULL
4. Очистить стек
Для того, чтобы очистить стек необходимо последовательно взять из него все элементы без сохранения результатов. То есть, алгоритмически это можно записать так:
S – Вершина стека
ПОКА S не пуст
T = S
S = след. за S элемент
Удалить элемент Т
Определяя дополнительную операцию распечатки содержимого стека через основные, определенные выше, мы должны учесть условие, что в стеке мы можем брать элементы только с вершины и класть, соответственно, только на вершину. Поэтому, наверняка нам придется использовать какую-то вспомогательную структуру. Используем для этого второй такой же стек. Будем брать элементы из первого стека, распечатывать и складывать во второй. А затем в обратном порядке переложим все второго в первый.
Алгоритм распечатки стека:
S – Стек, который необходимо распечатать
T = Новый стек
ПОКА S не пуст
X = ИЗ_СТЕКА(S)
ПЕЧАТЬ Х
ВСТЕК(T,X)
ПОКА T НЕ ПУСТ
X = ИЗ_СТЕКА(T)
ВСТЕК(S)
3 Структура основных входных и выходных данных
Структура входных
В качестве входных данных программа получает команды, вводимые пользователем с клавиатуры. Для их обработки не требуется выделение отдельного типа структур данных
Структура выходных
В качестве выходных – программа выдает состояние стека в текущий момент времени после выполнения над ним некоторых операций.
#include<stdio.h>
#include<conio.h>
#include"d:\bc\pp.cpp"
void main()
{//clrscr();
int k,x,f,a,c;
a=0;
c=0;
dstack *s,*r;
s=NULL;
while(a!=6)
{printf("\n Onepacii_nad dstakom");
printf("\n 1 Prosmotr steka");
printf("\n 2 Vzat element iz steka");
printf("\n 3 Pust li stek");
printf("\n 4 Dobavit element v stek");
printf("\n 5 Ochistit stek");
printf("\n 6 Vihod iz programmy");
printf("\n Viberite punkt ");
scanf("%d",&a);
//clrscr()
if(a==2){
f=take(&s,&c);
if(f==1)
printf("Vzali element %d",c);
else printf("Element nelzya vzat stack pust") ;
a=1;
};
if(a==3)
{
c=check(s);
if(c==0) {printf("Stack pust");}
else{printf("stack ne pust");}
a=1;
};
if(a==4)
{
//clrscr();
printf("Vvedite element ");
scanf("%d",&x);
add(&s,x);
a=1;
};
if(a==5)
{
clear(&s);
a=1;
};
if(a==1){
printf("\n");
prf(s);
};
getch();}}
5 Набор тестов
пункт |
результат |
2 |
Element nelzya vzat stack pust |
4 |
5 |
4 |
3 |
1 |
3 5 |
2 |
Vzali element 3 |
3 |
stack ne pust |
1 |
5 |
5 |
|
3 |
stack pust |
6 Результаты отладки и их анализ
программа работает верно
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.