Да се създаде демонстративна програма за моделиране на дек



Дата22.01.2019
Размер66.62 Kb.
#110900
Технически Университет – Габрово

катедра: КСТ

учебна дисциплина: Синтез и анализ на алгоритми


Курсова Задача

Студент:

Специалност: КСТ;

курс: ; група: ; фак. №

Тема: Да се създаде демонстративна програма за моделиране на ДЕК

с масив и със свързан списък.

Проверил:

Гр.Габрово (Гл.Ас.Йорданов: )

Теоретична част


  1. Формулировка на задачата




  • Да се създадът две отделни демонстративни програми за моделиране на ДЕК с масив и със свързан списък.

  • За изпълнението на задачата е необходимо да се използва динамичен масив и двойно-свързан списък.




  1. Теоритични сведения




  • Deque понякога се записва като dequeue, но това обикновено се използват в техническа литература или техническото писане, защото dequeue също е глагол и има значение " да премахнете от опашката ". Въпреки това , няколко библиотеки и някои автори, като Ахо и Улман в техния учебник структури от данни и алгоритми, пише dequeue. DEQ и DQ също са използвани като означение за ДЕК.




  • Има най-малко две общи начини за ефективно прилагане на deque: с модифицирана динамичен масив или с двойно-свързан списък.




  • С динамичен масив изпълнението използва даден вариант на динамичен масив, който може да нарасне от двата края, понякога се нарича масив deques. Тези масив deques разполага с всички характеристики на динамичен масив , като до елементите може да има случаен достъп , добро място за референция и вмъквания. Има възможност за премахване на елементи от двата края вместо само от единия , както е при опашката.




  • Две общи приложения на ДЕК:

-- Съхранение на съдържание в кръгова буфер.


-- Пренасочване на съдържанието от центъра на извършените масив, и

оразмеряване на извършените масив в двата края , когато е достигнат той.





  1. Алгоритъм на програмата




  • Алгоритмично реализиране на програмата чрез масив

Source Code: Array


#include

using namespace std;


int *x=NULL;

int n=0;


void add_last(int a) // Вкарване на елемент в края

{

int *tmp = new int[n+1];



for (int i=0;i

*(tmp+i)=*(x+i);

*(tmp+n)=a;

delete x;

x=tmp;

n++;


cout<<" element added... "<

}
void add_first(int a) // Вкарване на елемент в началото

{

int *tmp =new int[n+1];



*(tmp)=a;

for(int i=0;i

for (int i=0;i

*(tmp+i+1)=*(x+i);

delete x;

x=tmp;


n++;

cout<<" element added... "<

}
void print_queue() // Отпечатване на списък

{

if(n == 0)



{

cout<<" Empty deque "<

}

else


{

for (int i=0;i

{

cout<<*(x+i)<<" , ";



}

}

}


void del_last() // Изтриване на последен елемент

{

if(n == 0 )



{

cout<<" Empty deque "<

}

else


{

int *tmp = new int[n-1];

for (int i=0;i

{

*(tmp+i)=*(x+i);



}

delete x;

x=tmp;

n--;


cout<<" element deleted... "<

}

}


void del_first() // Изтриване на първи елемент

{

if(n == NULL)



{

cout<<" Empty deque "<

}

else


{

int *tmp = new int[n-1];

for (int i=0;i

{

*(tmp+i)=*(x+i+1);



}

delete x;

x=tmp;

n--;


cout<<" element deleted... "<

}

}



void main()

{

int i = 1;



int num = 0;

while(i>0 && i<6)

{

cout<<" ***************************************"<

cout<<" * 1 , to ADD element at the beggining *"<

cout<<" * 2 , to ADD element at the end *"<

cout<<" * 3 , to DELETE first element *"<

cout<<" * 4 , to DELETE last element *"<

cout<<" * 5 , to PRINT the queue *"<

cout<<" * other number , to finish *"<

cout<<" ***************************************"<

cout<<" type number : ";

cin>>i;

cout<

switch (i)

{

case 1 :



{

cout<<" type number to ADD : ";

cin>>num;

add_first(num);

break;

}

case 2 :



{

cout<<" type number to ADD : ";

cin>>num;

add_last(num);

break;

}

case 3 :



{

del_first();

break;

}

case 4 :



{

del_last();

break;

}

case 5 :



{

print_queue();

break;

}

default : break;



}

cout<

}

Source Code: Linked list

#include
struct list

{

int x;



list *next;

};
list *tque = NULL;

list *bque = NULL;
void add_last(int i) // Вкарване на елемент в края

{

list *tmp = new list;



tmp->x = i;

tmp->next = NULL;

if(tque == NULL)

{

bque = tque = tmp;



}

else


{

bque->next = tmp;

bque = tmp;

}

cout<<" element added... "<

}
void add_first(int i) // Вкарване на елемент в началото

{

list *tmp = new list();



tmp->x = i;

tmp->next=tque;

tque=tmp;

if(bque == NULL)

{

bque=tque;



}

cout<<" element added... "<

}
void print_queue() // Отпечатване на списък

{

if(tque == NULL)



{

cout<<" Empty deque "<

}

else


{

list *tmp = tque;

while(tmp != NULL)

{

cout<x<<" , ";



tmp=tmp->next;

}

}



}
void del_last() // Изтриване на последен елемент

{

if(bque == NULL || tque == NULL)



{

cout<<" Empty deque "<

}

else if(bque == tque)



{

list *tmp=tque;

tque = bque = NULL;

delete tmp;

}

else


{

list *tmp=tque;

while(( tmp != NULL ) && (tmp->next != NULL) && (tmp->next->next != NULL))

{

tmp = tmp->next;



}

delete tmp->next;

tmp->next = NULL;

bque = tmp;

cout<<" element deleted... "<

}

}


void del_first() // Изтриване на първи елемент

{

if(tque == NULL)



{

cout<<" Empty deque "<

}

else if(bque == tque)



{

list *tmp=tque;

tque = bque = NULL;

delete tmp;

}

else


{

list *tmp=tque;

tque=tque->next;

delete tmp;

cout<<" element deleted... "<

}

}


void main()

{

int i = 1;



int num = 0;

while(i>0 && i<6)

{

cout<<" ***************************************"<

cout<<" * 1 , to ADD element at the beggining *"<

cout<<" * 2 , to ADD element at the end *"<

cout<<" * 3 , to DELETE first element *"<

cout<<" * 4 , to DELETE last element *"<

cout<<" * 5 , to PRINT the queue *"<

cout<<" * other number , to finish *"<

cout<<" ****************************************"<

cout<<" type number : ";

cin>>i;

cout<

switch (i)

{

case 1 :



{

cout<<" type number to ADD : ";

cin>>num;

add_first(num);

break;

}

case 2 :



{

cout<<" type number to ADD : ";

cin>>num;

add_last(num);

break;

}

case 3 :



{

del_first();

break;

}

case 4 :



{

del_last();

break;

}

case 5 :



{

print_queue();

break;

}

default : break;



}

cout<

}

}



  1. Таблица на съответствията




Найменование

Предназначение

a

Променлива от реален тип

bque

Указател

i

Променлива от реален тип

n

Брояч

tmp

Указател

tque

Указател

x

Променлива за отпечатване на резултата



  1. Резултати от изпълнението на програмата


Начало на програмата
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number :
Добавяне на елемент в началото на дека
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 1
type number to ADD: 1

element added…


Добавяне на елемент в края на дека
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 2
type number to ADD: 2

element added…


Контролна проверка за наличието на елементите в дека ( Отпечатване на дека )
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 5
1 , 2 ,

Изтриване на първи елемент на дека
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 3
element deleted…
Изтриване на последен елемент на дека
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 4
element deleted…
Контролна проверка за наличието на елементи в дека ( Отпечатване на дека )
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************

type number : 5
Empty Deque

Край на програмата
***************************************

* 1 , to ADD element at the beggining *

* 2 , to ADD element at the end *

* 3 , to DELETE first element *

* 4 , to DELETE last element *

* 5 , to PRINT the deque *

* other number , to finish *

***************************************



type number : 6
Press any key to continue…


  1. Изводи:




  • Програмата има два общи начина за ефективно прилагане на ДЕК: с използването на модифициран динамичен масив или с двойно-свързан списък. С динамичен масив изпълнението използва даден вариант на динамичен масив, който може да нарасне от двата края. Има възможност за премахване на елементи от двата края вместо само от единия , както е при опашката.




  1. Използвана литература:




  • http://en.wikipedia.org

  • http://www.cplusplus.com

Каталог: files -> files
files -> Р е п у б л и к а б ъ л г а р и я
files -> Дебелината на армираната изравнителна циментова замазка /позиция 3/ е 4 см
files -> „Европейско законодателство и практики в помощ на добри управленски решения, която се състоя на 24 септември 2009 г в София
files -> В сила oт 16. 03. 2011 Разяснение на нап здравни Вноски при Неплатен Отпуск ззо
files -> В сила oт 23. 05. 2008 Указание нои прилагане на ксо и нпос ксо
files -> 1. По пътя към паметник „1300 години България
files -> Георги Димитров – Kreston BulMar
files -> В сила oт 13. 05. 2005 Писмо мтсп обезщетение Неизползван Отпуск кт


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница