
- •Процес знаходження номеру варіанта індивідуального завдання
- •Завдання на курсову роботу
- •1.Теоретична частина Стек
- •2. Завдання 3. Побудова атд
- •2. 1. Постановка задачі
- •2. 2. Динаміка вмісту
- •2. Перетворити вираз з інфіксної форми запису без дужок в постфіксну форму.
- •3.2.2. Граф-схема алгоритму
- •3.3. Результати виконання програми
- •Висновки
- •Список літератури
- •Додатки Частина 1. Побудова атд
- •Частина 2. Застосування атд
2. Перетворити вираз з інфіксної форми запису без дужок в постфіксну форму.
3.2. Алгоритм розв’язання задачі
3.2.1. Словесний опис алгоритму
Створюємо новий об’єкт типу “stack” та рядок символів для арифметичного виразу.
Ініціалізуємо рядок символів.
Перевіряється кожен елемент вхідної послідовності символів.
Якщо це операнд, то він додається до результуючого рядка символів.
Якщо поточний символ – операція, то виконується наступна перевірка.
якщо стек порожній, то символ записуємо у стек;
інакше символ «виштовхує» зі стека всі попередні символи з більшим або однаковим пріоритетом в результуючий рядок символів;
По завершенні перегляду інфіксного запису всі символи стеку записуємо у результуючий рядок символів.
3.2.2. Граф-схема алгоритму
3.3. Результати виконання програми
Висновки
Виконуюючи курсову роботу я:
провів детальний аналіз літератури та Інтернет джерел за темою «Динамічні структури», що дало змогу сформувати як теоретичні основи понять стек, черга та список так і основні алгоритми реалізації та роботи із цими типами даних. У курсовій роботі наведені графічні представлення стека, графічно показано суть алгоритмів вставки, видалення елемента стека;
дослідив внутрішнє представлення в пам’яті комп’ютера базових і похідних типів даних статичної структури та динамічних структур даних;
проаналізував застосування стеків на практиці, що дало змогу визначити, в яких цілях і з якою метою є їх найбільш доцільне використання. Було показано, що на даний час існує ряд специфічних задач і областей застосування, де без використання стека обійтись практично не можливо.
написав програму супроводжуючи її вказанням усіх можливих результатів роботи. У програмі зроблені коментарі, які роблять програму більш зрозумілою.
Список літератури
Грегори К. Использование Visual С++. Специальное издание. - М.: «Диалектика», 1999.
Мешков А.В., Тихомиров Ю.В. Visual С++ и MFC. Пер. с англ. – 2-е изд. перераб. и доп. – СПб.: БХВ - Петербург, 2002. – 1040 с.
Страуструп Б. Язык программирования С++. Третье издание. - М.: «Издательство Бином», 1999.
Трамбле Ж., Соренсон П. Введение в структуры данных. – М.:Машиностроение, 1982
Уильям Топп, Уильям Форд. Структуры данных в С++. – М.:Бином, 2000 - 700 с
Додатки Частина 1. Побудова атд
// stack.h
class stack
{
private:
int used, // змінна, що вказує на вершину стека
data[12], // масив елементів стека
item; // змінна, значення якої додається в стек
public:
stack (); // конструктор класу
bool EMPTY; // повертає значення 'true', якщо стек порожній і 'false',
// якщо це не так
void push ( int ); // додає новий елемент до стеку
void pop (); // вилучає елемент із стеку
int top (); // повертає значення вершини стека
int size (); // повертає розмір стека
};
// stack.cpp
#include "stack.h"
#include <iostream>
using namespace std;
stack::stack ()
{
used = 0;
item = 0;
EMPTY = true;
}
void stack::push ( int item )
{
data [used] = item;
used++;
EMPTY = false;
}
void stack::pop ()
{
used--;
if ( used == 0 )
EMPTY = true;
}
int stack::top ()
{
return ( data [used-1] );
}
int stack::size ()
{
return(used);
}
// main.cpp
#include <conio.h>
#include <iostream>
#include "stack.h"
using namespace std;
void output ( stack intStack ) // функція, для виводу динаміки стека
{
stack tmp;
tmp = intStack;
if( intStack.EMPTY == true )
wcout << L"Стек порожнiй\n";
else
{
cout << "[ ";
while ( tmp.EMPTY == false )
{
for ( int i=0; i < tmp.size (); i++ )
{
cout << tmp.top () << " ";
tmp.pop ();
}
}
cout << "]" << endl;
}
}
void main()
{
setlocale (LC_ALL,"rus_rus.866");
stack a;
int data,
size;
wcout << L"- Кiлькiсть елементiв у вхiднiй послiдовностi: ";
cin >> size;
wcout << L"- Введiть послiдовнiсть чiлих чисел: \n";
for ( int i = 1; i <= size; i++ )
{
wcout << L"Введiть " << i << L" елемент: ";
cin >> data;
if( data % 2 == 0 ) // якщо занчення елемента послідовності парне
{
if( a.size () == 12 )
{
wcout << L"- \"Переповнення cтеку\" (stack overflow)\n";
break;
}
else
a.push ( data );
}
if ( data % 2 != 0 ) // якщо значення елемента послідовності НЕ парне
{
if ( a.EMPTY == true )
{
wcout << L"- \"Втрата значимостi cтеку\" (stack underflow)" << endl;
//break;
}
else
a.pop ();
}
wcout << L"- Динамiка стека: ";
output ( a );
}
_getch();
}