Динамические структуры данных

Разработка алгоритма двусвязного списка на основе указателей для выполнения операций добавления элемента, распечатки подсписков, корректировки поля элемента и поиска данных по полю. Рассмотрение свойств динамических структур данных, области их применения.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.10.2010
Размер файла 79,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Введение

Независимо от типа решаемых задач, любая программа оперирует какими-то данными, а сама программа представляет собой методы управления и обработки этих данных. Скорость выполнения программой поставленной задачи зависит не только от алгоритмов, использованных в ней для обработки и управления данными, но также и от самой организации данных. Таким образом, мы приходим к понятию о структурах данных.

В отличие от статических динамические структуры данных имеют большую гибкость в применении, так как не имеют ограничения в размере (естественно, не считая памяти машины).

Прямое взаимодействие между программой через пользователя и структурами данных оставляет открытыми множество данных, модификация которых нелегитимным способом (минуя интерфейс) может привести к нежелательным последствиям. Чтоб миновать данную проблему необходимо "возвести стены" между данными и программой, оставив лишь "окошко" в виде интерфейса. Для этого необходимо определить абстрактные типы данных, с помощью которых эти стены воздвигаются.

В данной работе разрабатывается динамический тип данных - список, который впоследствии реализуется в виде двусвязного списка, реализованного при помощи косвенной адресации, основанной на указателях.

1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

1.1 Достоинства динамических структур данных

Динамические структуры по определению характеризуются отсутствием физической смежности элементов структуры в памяти непостоянством и непредсказуемостью размера (числа элементов) структуры в процессе ее обработки. В этом разделе рассмотрены особенности динамических структур, определяемые их первым характерным свойством.

Поскольку элементы динамической структуры располагаются по непредсказуемым адресам памяти, адрес элемента такой структуры не может быть вычислен из адреса начального или предыдущего элемента. Для установления связи между элементами динамической структуры используются указатели, через которые устанавливаются явные связи между элементами. Такое представление данных в памяти называется связным.

Элемент динамической структуры состоит из двух полей:

- информационного поля или поля данных, в котором содержатся те данные, ради которых и создается структура; в общем случае информационное поле само является интегрированной структурой - вектором, массивом, записью и т.п.;

- поле связок, в котором содержатся один или несколько указателей, связывающий данный элемент с другими элементами структуры;

Когда связное представление данных используется для решения прикладной задачи, для конечного пользователя "видимым" делается только содержимое информационного поля, а поле связок используется только программистом-разработчиком.

Достоинства связного представления данных:

- в возможности обеспечения значительной изменчивости структур;

- размер структуры ограничивается только доступным объемом машинной памяти;

- при изменении логической последовательности элементов структуры требуется не перемещение данных в памяти, а только коррекция указателей.

Вместе с тем связное представление не лишено и недостатков, основные из которых:

- работа с указателями требует, как правило, более высокой квалификации от программиста;

- на поля связок расходуется дополнительная память;

- доступ к элементам связной структуры может быть менее эффективным по времени.

1.2 Применение динамических структур

Последний недостаток является наиболее серьезным и именно им ограничивается применимость связного представления данных. Если в смежном представлении данных для вычисления адреса любого элемента нам во всех случаях достаточно было номера элемента и информации, содержащейся в дескрипторе структуры, то для связного представления адрес элемента не может быть вычислен из исходных данных.

Дескриптор связной структуры содержит один или несколько указателей, позволяющих войти в структуру, далее поиск требуемого элемента выполняется следованием по цепочке указателей от элемента к элементу. Поэтому связное представление практически никогда не применяется в задачах, где логическая структура данных имеет вид вектора или массива - с доступом по номеру элемента, но часто применяется в задачах, где логическая структура требует другой исходной информации доступа (таблицы, списки, деревья и т.д.).

1.3 Задание курсового проекта

Имеем вариант номер пятнадцать. Тип структуры - двусвязный список с такими полями:

- наименование изделия;

- дата изготовления;

- количество.

В первый односвязный подсписок входят все записи, во второй - только те, у которых поле количество меньше заданного числа к.

Следует обеспечить выполнение таких операций:

- добавление первого элемента в список;

- поиск элемента по полю количество;

- распечатка подсписков;

- корректировка значения поля количество некоторого элемента.

1.4 Описание структуры данных "двусвязный список"

Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения. Список, отражающий отношения соседства между элементами, называется линейным. Если ограничения на длину списка не допускаются, то список представляется в памяти в виде связной структуры. Линейные связные списки являются простейшими динамическими структурами данных.

Графически связи в списках удобно изображать с помощью стрелок. Если компонента не связана ни с какой другой, то в поле указателя записывают значение, не указывающее ни на какой элемент. Такая ссылка обозначается специальным именем - nil (или null).

На рис. 1 приведена структура односвязного списка. На нем поле INF - информационное поле (данные), NEXT - указатель на следующий элемент списка. Каждый список должен иметь особый элемент, называемый указателем начала списка или головой (HEAD) списка, который обычно по формату отличен от остальных элементов. В поле указателя последнего элемента списка находится специальный признак nil, свидетельствующий о конце списка.

Рис. 1.

В данной работе под двусвязным списком подразумевается два совмещенных односвязных списка, то есть два подсписка. Поэтому у каждого элемента списка есть два указателя: next - на следующий элемент списка, next_men_k - на следующий элемент с полем количество, меньшим числа к. Таким образом, в первом подсписке - все элементы списка, во втором - с полем количество, меньшим к. Следовательно, у элементов, не вошедших во второй подсписок, указатель next_men_k равен null. Пример такого двусвязного списка изображен на рис. 2.

Рис. 2.

Поскольку данный список совмещает в себе два односвязных списка, то необходимы и две головы: Head - на первый элемент общего списка, Head_K - на голову второго подсписка.

Каждый элемент нашего списка имеет следующую структуру, записанную на языке "С++":

struct TElem {

char Name[50];

int Chislo, Month, Year, Number;

TElem *next, *next_men_k;

};

где Name, Chislo, Month, Year, Number - информационные поля.

Также нам пригодится тип PElem - "указатель на элемент структуры":

typedef TElem* PElem;

2. РАЗРАБОТКА

Пользователю предлагается меню, в котором представлены пронумерованные действия (добавление нового элемента в список, поиск элемента по полю количество, распечатка подсписка, корректировка значения поля "Количество" некоторого элемента), а также некоторая информация (об авторе, руководителях, само задание).

Реакция программы на выбранный пользователем пункт меню реализуется оператором варианта switch.

Каждое действие реализуется отдельной функцией, имеющей соответствующее имя: Add_Elem - добавление, Print_List - распечатка, Find - поиск, Correct - правка количества.

Рассмотрим каждую по порядку.

2.1 Операция добавления элемента

Функция void Add_Elem(PElem &Head, PElem Head_K, int k) реализует добавление элемента в начало подсписка двусвязного списка. Её параметрами являются головы обоих подсписков, а также целое число к, которое является критерием помещение нового элемента либо в один из списков, либо в оба сразу.

Блок-схема алгоритма её работы представлена на рис. 2 в Приложении В.

Первоначально пользователь вводит поле количество value нового элемента, значение которого сравнивается с числом к. Результат этого сравнения определяет будет ли добавлен новый элемент в начало второго подсписка, в котором находятся только элементы с количеством, меньшим числа к. Это реализуется следующим фрагментом кода:

if (value<k) {

NewElem->next_men_k=Head_K;

Head_K=NewElem;

}

else NewElem->next_men_k=NULL;

NewElem->next=Head;

Head=NewElem;

Если поле количество меньше числа к, то происходит включение нового элемента в начало второго подсписка: его указатель будет связан с элементом, на который она указывает, а затем голова указывает на него - он становится первым в этом подсписке. Иначе указатель next_men_k обнуляется.

Далее, независимо от поля количество, происходит включение нового элемента в начало первого подсписка: в нём он станет перед элементом головы, а голова будет указывать на новый элемент.

Процессы, происходящие в памяти при включении элемента в оба подсписка, изображены на рис. 3.

Рис. 3.

При включении только в первый подсписок, происходит только процессы нижней половины рис. 3.

2.2 Операция распечатки подсписка

Функция void Print_List(PElem Head, PElem Head_K) реализует распечатку одного из подсписков.

Блок-схема алгоритма её работы представлена на рис. 3 в Приложении В.

Здесь используется вспомогательный указатель Curr на текущий элемент.

Выбор пользователя одного из двух подсписков сохраняется в переменной menshe_k. Если пользователь выбрал второй подсписок, то Curr присваивается значение Head_K, если первый - Head. Далее, пока Curr не примет значение null (то есть достигнут конец подсписка), происходит перемещение по подсписку с выводом полей текущего элемента Curr. Перемещение реализуется условным оператором с проверкой что выбрал пользователь: в одном случае перемещение идет по указателям next, в другом - по next_men_ k. Это происходит в следующем фрагменте:

if (menshe_k-1) Curr=Head;

else Curr=Head_K;

while (Curr) {

{Вывод полей Curr}

if (menshe_k-1) Curr=Curr->next;

else Curr=Curr->next_men_k;

}

Перемещение по каждому из подсписков изображено на рис. 4.

Рис. 4.

2.3 Операция изменения поля элемента списка

Функция void Correct(PElem &Head, PElem &Head_K, int k) реализует изменение значения поля "Количество" некоторого элемента списка.

Блок-схема алгоритма её работы представлена на рис. 5 в Приложении В. Поиск элемента для изменения происходит по части поля "Наименование", введенного пользователем. До ввода нового, старое значение количества запоминается в переменной num_was. Поскольку критерием нахождения элемента во втором списке является число к, то следующий условный оператор проверяет было ли изменено количество элемента так, что оно стало меньше (больше) к:

if (num_was>=k&&Curr->Number<k) {

Curr->next_men_k=Head_K;

Head_K=Curr;

}

else if (num_was<k&&Curr->Number>=k) {

if (Curr==Head_K) Head_K=Curr->next_men_k;

else Temp->next_men_k=Curr->next_men_k;

Curr->next_men_k=NULL;

};

Если количество было больше и стало меньше числа к, то есть элемент отсутствовал во втором подсписке, то его нужно добавить туда, что выполняется первой частью условного оператора. Добавление элемента, на который ссылается указатель Curr, во второй подсписок изображено на рис. 5.

Рис. 5.

Если же значение поля количество изменилось так, что было меньше и стало больше к, то есть он был во втором подсписке, то его нужно удалить оттуда. Поскольку подсписок односвязный и для удаления элемента необходимо иметь указатель на предыдущий элемент, то вводится дополнительный указатель, которому на каждом шаге прохода по списку присваивается адрес текущего элемента, если он включен во второй подсписок. Удаление реализуется второй частью оператора if. При этом проверяется, не является ли текущий элемент головой второго подсписка. Если так, то головой становится следующий за текущим элемент (рис. 6).

Рис. 6.

Если же текущий элемент - не голова, то он удаляется из подсписка обнулением (null) его указателя next_men_k, а предыдущий элемент Temp ссылается на следующий после Curr:

Temp->next_men_k=Curr->next_men_k;

Это удаление из середины подсписка представлено на рис. 7.

Рис. 7.

2.4 Операция поиска элемента по полю "Количество"

Функция void Find(PElem &Head, PElem &Head_K, int k) реализует поиск значения поля "Количество" элементов списка.

Блок-схема алгоритма её работы представлена на рис. 4 в Приложении В. Введенное пользователем число сохраняется в переменной number.

Поскольку количество элементов второго подсписка не больше количества первого, то целесообразно сравнить number с к, и вести поиск во втором подсписке (если он не пуст):

if (Head_K&&number<k) Curr=Head_K;

else if (Head) Curr=Head;

Далее пока не достигнут конец выбранного подсписка (инвариант Curr?Null цикла while) сравниваем number с количеством текущего элемента. Если есть совпадение, то выводятся поля Curr. Реализацию перемещения по списку см. в пункте 2.2 на рис. 4.

3. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

Программа разработана в среде Turbo C 3.0.

Поскольку целью данной работы является работа с динамическими структурами данных, то в программу не были введены средства проверки корректности введенных данных. Автор гарантирует правильную работу программы только при верно введенных данных. Это означает, что если там, где это требуется, введено не число (то есть какие-либо другие символы кроме цифр), то дальнейшее поведение программы непредсказуемо.

Ожидание выбора пункта меню длится до тех пор, пока не будет введена цифра, присутствующая среди номеров пунктов.

После завершения каждой операции следует нажать любую клавишу для возврата в главное меню: Press any klavisha to return to Main Menu

Первоначально пользователю предлагается ввести число к: Enter number k->

Далее предлагается ввести номер действия из следующего меню:

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->

Пункты меню означают такие действия:

1. Выводится информация об авторе программы

2. Выводится задание курсовой работы

3. Выводится информация о руководителях работы

4. Добавление элемента в список

5. Распечатка подсписков

6. Поиск элемента по полю "Количество"

7. Корректировка значения поля "Количество"

8. Завершение работы программы

Далее рассматриваются диалоги при операциях со списком.

При операции добавления элемента в список пользователь поочередно по приглашению вводит поля: количество; наименование; число, месяц и год. Поле "Наименование" не должно содержать пробелов. Также не контролируется правильность введенной даты. При успешном добавлении элемента выводится соответствующее сообщение.

При операции печати подсписков осуществляется выбор из следующего меню:

Choose the sublist:

1. Elements with field "Kolichestvo" less than k

2. All elements

Пункты которого означают:

1. Вывод элементов, у которых значение поля "Количество" меньше числа к

2. Вывод всех элементов

Если подсписок пуст, выводится соответствующее сообщение.

Во время операции корректировки поля количество элемента, поиск элемента ведется по полю "Наименование" (его полном имени либо его части), которое следует ввести по приглашению:

Enter the name (or its part) we should correct the number of->

Если найден элемент с частью введенного имени, пользователя спрашивают о необходимости корректировки значения этого элемента:

Shall we correct it? Press 'y' for YES, other keys - NO

Нажатие клавиши "Y" соответствует подтверждению, другая клавиша - отказу.

Если элемент не найден, то выводится соответствующее сообщение.

Операция поиска элемента по полю "Количество". По приглашению вводится количество для поиска:

Enter the number we should find->

После выведенных результатов поиска выводится количество найденных элементов.

4. КОНТРОЛЬНЫЙ ПРИМЕР

Enter number k-> 5

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->4

ADDING A NEW ELEMENT:

Vvedite pole \"Kolichestvo\"->3

Vvedite pole \"Name\"-> Ferarri

Vvedite pole \"Chislo\"->12

Vvedite pole \"Month\"->12

Vvedite pole \"Year\"->99

A new element was added successfully!

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->4

ADDING A NEW ELEMENT:

Vvedite pole \"Kolichestvo\"->2

Vvedite pole \"Name\"-> BMW

Vvedite pole \"Chislo\"->20

Vvedite pole \"Month\"->5

Vvedite pole \"Year\"->98

A new element was added successfully!

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->4

ADDING A NEW ELEMENT:

Vvedite pole \"Kolichestvo\"->7

Vvedite pole \"Name\"-> Chevrolet

Vvedite pole \"Chislo\"->25

Vvedite pole \"Month\"->8

Vvedite pole \"Year\"->2000

A new element was added successfully!

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->5

PRINTING LIST:

Choose the sublist:

1. Elements with field "Kolichestvo" less than k

2. All elements

5

Wrong choice. Try snova please->1

Vivod podspiska:

Name Chislo Month Year Number

BMW 20 5 98 2

Ferarri 12 12 99 3

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->5

PRINTING LIST:

Choose the sublist:

1. Elements with field "Kolichestvo" less than k

2. All elements

2

Vivod podspiska:

Name Chislo Month Year Number

Chevrolet 25 8 2000 7

BMW 20 5 98 2

Ferrari 12 12 99 3

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->6

FINDING AN ELEMENT:

Enter the number we should find->2

Name Chislo Month Year Number

BMW 20 5 98 2

There is 1 element(s) with such field

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->7

CORRECTING SOME NUMBER:

Enter the name (or its part) we should correct the number of->Fer

Name Number

Ferrari 7

Shall we correct it? Press 'y' for YES, other keys - NO y

Enter a new number->1

OK!

Press any klavisha to return to Main Menu

Main Menu

1. Author

2. Task

3. Rukovoditeli

4. Add an element

5. Print list

6. Find an element by field "Number"

7. Correct some number

8. Exit

What shall we do? ->5

PRINTING LIST:

Choose the sublist:

1. Elements with field "Kolichestvo" less than k

2. All elements

1

Vivod podspiska:

Name Chislo Month Year Number

Chevrolet 25 8 2000 1

BMW 20 5 98 2

Ferrari 12 12 99 3

Press any klavisha to return to Main Menu

ЗАКЛЮЧЕНИЕ

В данной курсовой работе был реализован абстрактный тип данных - двусвязный список на основе указателей.

В процессе реализации было использовано разбиение необходимых действий на функции, что значительно упростило модификацию и отладку программы. Также разработаны алгоритмы для обработки двусвязного списка, реализующие такие операции: добавление, распечатка подсписков, корректировка поля элемента, поиск элемента по полю.

Рассмотрены основные свойства динамических структур данных, область их применения, а также приведены примеры их использования.

ПЕРЕЧЕНЬ ЛИТЕРАТУРЫ

1. Шилдт Г. "Справочник программиста по С/С++": Пер. с англ.: Издательский дом "Вильямс", 2001.

2. Новиков Ф.А. "Дискретная математика для программистов". - СПб: Питер, 2001.

3. Д. Кнут. "Искусство программирования". Том 1.

ПРИЛОЖЕНИЕ А

Коды операций

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <iostream.h>

#define Main_Menu "\nMain Menu\n1. Author\n2. Task\n3. Rukovoditeli\n4. Add an element\n5. Print list\n6. Find an element by field \"number\"\n7. Correct some number\n8. Exit\nWhat shall we do?->";

#define task "\nTASK:\n\tVariant N15\nDvusvyaznii spisok imeet takie polya: \"Naimenovanie\", \"Data izgotovleniya\",\n \" Kolichestvo\"\nV pervii odnosvyaznii podspisik vhodyat vse zapisi. Vo vtoroi-te, gde pole \"Kolichestvo\" menshe k\n";

//=====================================================

struct TElem {

char Name[50];

int Chislo, Month, Year, Number;

TElem *next, *next_men_k;

};

typedef TElem* PElem;

//=====================================================

void Correct(PElem &Head, PElem &Head_K, int k)

{

char* name;

PElem Curr=Head, Temp=Head_K;

int count=0;

int num_was;

cout<<"CORRECTING SOME NUMBER:\n";

cout<<"\nEnter the name (or its part) we should correct the number of->";

cin>>name;

while (Curr) {

if (strstr(Curr->Name,name)) {

count++;

printf("\nName Number\n%s\t%i\n",Curr->Name,Curr->Number);

puts("\nShall we correct it? Press 'y' for YES, other keys - NO\n");

if (!(getch()-'y')) {

num_was=Curr->Number;

cout<<"\nEnter a new number->";

cin>>Curr->Number;

if (num_was>=k&&Curr->Number<k) {

Curr->next_men_k=Head_K;

Head_K=Curr;

}

else if (num_was<k&&Curr->Number>=k) {

if (Curr==Head_K) Head_K=Curr->next_men_k;

else Temp->next_men_k=Curr->next_men_k;

Curr->next_men_k=NULL;

}

}

}

if (Curr->next_men_k) Temp=Curr;

Curr=Curr->next;

}

if (!count) cout<<"\nNo such element\n";

cout<<"\n\n\nPress any klavisha to return to Main Menu";

getch();

clrscr();

}

//=====================================================

void Print_List(PElem Head, PElem Head_K)

{

cout<<"PRINTING LIST:\n";

PElem Curr=NULL;

int menshe_k;

cout<<"Choose the sublist:\n1. Elements with field \"Kolichestvo\" less than k\n2. All elements\n";

cin>>menshe_k;

while (menshe_k>2||menshe_k<1) {

cout<<"\nWrong choice. Try snova please->";

cin>>menshe_k;

}

if (menshe_k-1) Curr=Head;

else Curr=Head_K;

cout<<"\nVivod podspiska:\n\n";

if (!Curr) cout<<"\n\nPodspisok pust!\n";

else {

printf("\nName Chislo Month Year Number\n");

while (Curr) {

printf("\n%s \t %i\t%i\t%i\t%i",Curr->Name,Curr->Chislo,Curr->Month,Curr->Year,Curr->Number);

if (menshe_k-1) Curr=Curr->next;

else Curr=Curr->next_men_k;

}

cout<<"\n\n\nPress any klavisha to return to Main Menu";

}

getch();

clrscr();

}

//=====================================================

void Find(PElem Head, PElem Head_K, int k)

{

cout<<"FINDING AN ELEMENT:\n";

int number, count=0;

PElem Curr=NULL;

cout<<"\nEnter the number we should find->";

cin>>number;

printf("Name Chislo Month Year Number");

if (Head_K&&number<k) Curr=Head_K;

else if (Head) Curr=Head;

while (Curr) {

if (Curr->Number==number) {

printf("\n%s\t%i\t%i\t%i\t%i",Curr->Name,Curr->Chislo,Curr->Month,Curr->Year,Curr->Number);

count++;

}

if (number>=k) Curr=Curr->next;

else Curr=Curr->next_men_k;

}

printf("\n\n\n\nThere is %i element(s) with such field\n", count);

getch();

clrscr();

}

//=====================================================

void Add_Elem(PElem &Head, PElem &Head_K, int k)

{

cout<<"ADDING A NEW ELEMENT:\n";

PElem NewElem=new TElem;

int value;

cout<<"\nVvedite pole \"Kolichestvo\"->";

cin>>value;

if (value<k) {

NewElem->next_men_k=Head_K;

Head_K=NewElem;

}

else NewElem->next_men_k=NULL;

NewElem->next=Head;

Head=NewElem;

cout<<"\nVvedite pole \"Name\"->";

cin>>NewElem->Name;

cout<<"\nVvedite pole \"Chislo\"->";

cin>>NewElem->Chislo;

cout<<"\nVvedite pole \"Month\"->";

cin>>NewElem->Month;

cout<<"\nVvedite pole \"Year\"->";

cin>>NewElem->Year;

NewElem->Number=value;

cout<<"\nA new element was added successfully!\n";

cout<<"\nPress any klavisha to return to Main Menu";

getch();

clrscr();

};

//=====================================================

void main()

{

PElem Head=NULL, Head_K=NULL;

int k, choice;

cout<<"\nEnter number k->";

cin>>k;

while (k<=0) {

clrscr();

cout<<"HebepHoe k. Bbodite snova->";

cin>>k;

}

while (1) {

cout<<Main_Menu;

cin>>choice;

switch (choice) {

case 1: clrscr();

cout<<"\nAUTHOR:\nTkachuk Vasilii Vil'evich. Student of AE-035,KISS\n";

break;

case 2: clrscr();

cout<<task;

break;

case 3: clrscr();

cout<<"\nRUKOVODITELI:\nOleschuk O.V., Zaschelkin K.V.\n";

break;

case 4: clrscr();

Add_Elem(Head,Head_K,k);

break;

case 5: clrscr();

Print_List(Head,Head_K);

break;

case 6: clrscr();

Find(Head,Head_K,k);

break;

case 7: clrscr();

Correct(Head,Head_K,k);

break;

case 8: clrscr();

exit(0);

default:clrscr();

cout<<"\nVveden ne pravilnii nomer menu! Snova please\n";

}

}

}


Подобные документы

  • Рассмотрение понятия абстрактного типа данных. Реализация операций добавления элемента в пустой список и после указанных данных, удаления конкретного элемента и распечатки записей. Разработка интерфейса, исключающего нелигитимное модифицирование данных.

    курсовая работа [721,4 K], добавлен 24.09.2010

  • Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.

    курсовая работа [22,9 K], добавлен 19.10.2010

  • Исследование программного средства для управления базой данных с информацией о фильмах. Составление алгоритма удаления и добавления элемента в указанное место двунаправленного списка. Характеристика поиска, вывода на экран и сортировки элементов списка.

    курсовая работа [94,5 K], добавлен 23.09.2011

  • Способы ограждения пользователей от деталей фактического устройства данных. Список описателей переменных, указателей или массивов. Статические или динамические структуры данных. Доступ к различным элементам данных. Добавление и удаление элементов.

    презентация [57,8 K], добавлен 14.10.2013

  • Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.

    курсовая работа [2,1 M], добавлен 16.05.2015

  • Средства создания динамических структур данных. Формат описания ссылочного типа. Структура памяти во время выполнения программы. Линейные списки, стек, очередь. Организация списков в динамической памяти. Пример создания списка в обратном порядке.

    лабораторная работа [788,2 K], добавлен 14.06.2009

  • Разработка программы для работы с множеством данных, перечень и работа ее модулей. Проверка работы программы. Реализация поиска элемента в файле по его номеру и добавление элементов в конец уже созданного НД. Возможности и особенности применения программы

    курсовая работа [3,5 M], добавлен 22.06.2012

  • Организация данных с помощью бинарных деревьев. Определение бинарного дерева. Упорядоченное двоичное дерево поиска и его свойства. Программная реализация добавления данных в упорядоченное двоичное дерево с использованием динамических структур данных.

    курсовая работа [459,0 K], добавлен 09.08.2012

  • Понятие класса как собрания информации, которая включает в себя данные и функции. Создание класса "Дек". Реализация методов: добавления элемента в начало и в конец дека, удаление элемента из начала и конца дека, проверка дека на наличие в нем элементов.

    курсовая работа [568,9 K], добавлен 08.09.2010

  • Проблемы с организацией данных. Определение и классификация динамических структур данных. Линейные односвязные, двухсвязные, кольцевые списки. Очередь, стеки. Описание основных типов данных и функции для работы с ними. Листинг программы, пример ее работы.

    контрольная работа [290,6 K], добавлен 17.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.