
- •Процес знаходження номеру варіанта індивідуального завдання
- •Завдання на курсову роботу
- •1.Теоретична частина Стек
- •2. Завдання 3. Побудова атд
- •2. 1. Постановка задачі
- •2. 2. Динаміка вмісту
- •Послідовність
- •3.2.2. Граф-схема алгоритму
- •3.3. Результати виконання програми
- •Висновки
- •Список літератури
- •Додатки Частина 1. Побудова атд
- •Частина 2. Застосування атд
3.2.2. Граф-схема алгоритму
3.3. Результати виконання програми
Висновки
Виконуюючи курсову роботу я:
провів детальний аналіз літератури та Інтернет джерел за темою «Динамічні структури», що дало змогу сформувати як теоретичні основи понять стек, черга та список так і основні алгоритми реалізації та роботи із цими типами даних.
дослідив внутрішнє представлення в пам’яті комп’ютера базових і похідних типів даних статичної структури та динамічних структур даних;
проаналізував застосування списків на практиці, що дало змогу визначити, в яких цілях і з якою метою є їх найбільш доцільне використання. Було показано, що на даний час існує ряд специфічних задач і областей застосування, де без використання списка обійтись практично не можливо.
написав програму, тестуючи її на усі можливі результати роботи. У програмі зроблені коментарі, які роблять програму більш зрозумілою.
Список літератури
Грегори К. Использование Visual С++. Специальное издание. - М.: «Диалектика», 1999.
Мешков А.В., Тихомиров Ю.В. Visual С++ и MFC. Пер. с англ. – 2-е изд. перераб. и доп. – СПб.: БХВ - Петербург, 2002. – 1040 с.
Страуструп Б. Язык программирования С++. Третье издание. - М.: «Издательство Бином», 1999.
Трамбле Ж., Соренсон П. Введение в структуры данных. – М.:Машиностроение, 1982
Уильям Топп, Уильям Форд. Структуры данных в С++. – М.:Бином, 2000 - 700 с
Додатки Частина 1. Побудова атд
//list.h
class SListNode {
public:
int data;
SListNode* next;
SListNode (int el);
};
class Clist{
public:
typedef SListNode *Clist::list;
static void print_list(list head);
static void push_before(list tmp, int x);
static void del(list *head_ptr, list *node_ptr);
static list find_before(list head, list node);
};
//list.cpp
#include "list.h"
#include <iostream>
using namespace std;
SListNode::SListNode (int el)
{
data = el;
next = NULL;
}
void Clist::print_list(Clist::list head)
{
Clist::list tmp=head;
while (tmp != NULL)
{
cout<<tmp->data<<"| ";
tmp = tmp->next;
}
cout<<endl;
return;
}
void Clist::push_before(Clist::list tmp, int x)
{
SListNode* q = new SListNode(tmp->data);
q->next=tmp->next;
tmp->data=x;
tmp->next=q;
}
Clist::list Clist::find_before(Clist::list head, Clist::list node)
{
while ((head->next != node) && head) head = head->next;
return head;
}
void Clist::del(Clist::list *head_ptr, Clist::list *node_ptr)
{
Clist::list tmp , save_ptr = *node_ptr;
if (*node_ptr == *head_ptr)
*head_ptr = (*head_ptr)->next;
else
if (!((*node_ptr)->next))
{
tmp = find_before(*head_ptr,*node_ptr);
tmp->next = NULL;
}
else
{
tmp = (*node_ptr)->next;
(*node_ptr)->data = tmp->data;
(*node_ptr)->next = tmp->next;
save_ptr = tmp;
};
free(save_ptr);
return ;
}
//main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <conio.h>
#include "list.h"
#include <iostream>
using namespace std;
int main()
{
SListNode* head = new SListNode(0); //створення списку
int k,el;
bool empty = true;
cout<<"Enter count of elements - ";
cin>>k;
cout<<endl;
for (int i=0; i<k; i++) //опрацювання вх. послідовності
{
cout<<"\nEnter "<<(i+1)<<" element ";
cin>>el;
if(el >= 0) //якщо вх ел. не відємний
{
if(!empty) //якщо список не пустий
{
Clist::push_before(head,el); // на початок списку додається новий елемент
}
if(empty) //якщо список пустий
{
head -> data = el; //у нього додається елемент
empty = false;
}
Clist::print_list(head);
}
if(el<0) //якщо вх.ел. відємний
{
Clist::del(&head, &head);
Clist::print_list(head);
if (head == NULL) { empty = true; head = new SListNode(0); }
}
}
_getch();
return 0;
}