Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 3
з програмування
Тема: Структура даних „СТЕК”
Мета роботи: Побудувати структуру даних “cтек” і дослідити динаміку вмісту стеку.
Teoритичні відомості: Стеком називається впорядкований набір елементів у якому розміщення нових елементів і визначення існуючих виконується тільки з одного його кінця, який називається вершиною стеку.
Завдання: Реалізуйте зв’язаний стек, у якому до опису стеку додана ще одна змінна EMPTY. Перепишіть основні операції роботи зі стеком і продемонструйте динаміку вмісту стеку.
Програма:
// інтерфес
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define infotype int
#define printfspec "%d"
struct node
{
infotype data;
struct node *next;
}new_node;
typedef struct node *stack;
void Init(stack *stack_top_ptr);
int Empty(stack stack_top);
void Push(stack *stack_top_ptr, infotype new_data);
infotype Pop(stack *stack_top_ptr);
void Print(stack stack_top);
void main()
{
stack L2;
infotype EMPTY;
struct node a={6,NULL},b={1,&a},c={2,&b},*L1=&c;
printf("pochatkovyiu steck;\n");
Print (L1);
printf("Vvedit element jakyiy dodaty;\n");
scanf("%d",&EMPTY);
Push (&L1,EMPTY);
printf("pochatkovyiu steck (+) now_element;\n");
Print (L1);
EMPTY=Pop (&L1);
printf("pochatkovyiu steck (-) 1_element;\n");
Print (L1);
Init(&L2);
Push (&L2,EMPTY);
printf("inshyiu steck;\n");
Print (L2);
}
// ініціалізація
void Init(stack *stack_top_ptr)
{ *stack_top_ptr = NULL;
return;
}
//перевірка чи стек порожній
int Empty(stack stack_top)
{ return stack_top == NULL;
}
// додаваня в стек
void Push(stack *stack_top_ptr, infotype new_data)
{
new_node.data = new_data;
new_node.next = *stack_top_ptr;
*stack_top_ptr = &new_node;
return;
}
//вилучення зі стеку
infotype Pop(stack *stack_top_ptr)
{ stack del_node;
infotype del_data;
if (Empty(*stack_top_ptr))
{ printf(" Error : Stack is empty!\n");
return 0;
}
else
{ del_node = *stack_top_ptr;
del_data = (*stack_top_ptr)->data;
*stack_top_ptr = (*stack_top_ptr)->next;
return del_data;
};
}
// роз друк стеку
void Print(stack stack_top)
{ void PrintReverse(stack stack_top);
printf("Elements of stack: ");
if (Empty(stack_top))
printf("Stack is empty! \n");
else
{ PrintReverse(stack_top);
printf("\n");
}
return;
}
void PrintReverse(stack stack_top)
{
if (stack_top)
{
PrintReverse(stack_top->next);
printf(printfspec,stack_top->data);
}
return;
}
Результати:
Pochatkovyiu stack;
Elements of stack; 612
Vvedit element jakyiu dodaty; 4
Pochatkovyiu stack <+> now_element;
Elements of stack; 6124
Pochatkovyiu stack < - > 1_element;
Elements of stack; 612
Inshyiu stack;
Elements of stack; 4
Висновок: На дані лабораторні роботі ми навчилися будувати стек і відстежили динаміку змін вмісту стеку.