Описание организации структур данных
⇐ ПредыдущаяСтр 2 из 2 Для реализации стека, очереди и дека созданы структуры steck,qucue и дек имеющие следующие поля. В стеке: 1) поле а – информационное поле; 2) поле pred – поле указатель на предыдущий элемент. В очереди: 1) поле а – информационное поле; 2) поле next – поле указатель на следующий элемент. В деке: 1) поле а – информационное поле; 2) поле pred – поле указатель на предыдущий элемент; 3) поле next – поле указатель на следующий элемент. Структура р является текущим элементом. Структура top головным элементом.
Описание алгоритма
Создание стека: 1) Создаем головной элемент; 2) Создаем текущий элемент поле указатель, которого указывает на головной элемент; 3) Текущий элемент становится головным. Добавление элемента в начало: 1) Осуществляем переход в начало стека; 2) Поле указатель первого элемента заносим адрес добавляемого элемента; Добавление элемента в конец: 1) Поле указатель добавляемого элемента заносим адрес головы стека. Добавление элемента середину: 1) Осуществляем переход в середину; 2) Поле указатель добавляемого элемента заносим адрес первого элемента; 3) Поле указатель третьего элемента заносим адрес добавляемого элемента. Удаление первого элемента: 1) Переходим в начало стека; 2) Поле указатель второго элемента заносим 0; 3) Удаляем элемент. Удаление последнего элемента: 1) Предыдущий элемент становится головным; 2) Удаляем элемент. Удаление элемента из середины: 1) Осуществляем, переходим в середину; 2) Поле указатель следующего элемента заносим адрес, хранящийся в поле указателя удаляемого элемента; 3) Удаляем элемент.
Формальное описание входных и выходных данных Входными данными являются:
1) Размер стека; 2) Элементы стека; 3) Добавляемый элемент; 4) Удаляемый элемент. Выходными данными являются: 1) Содержимое стека.
Аналогично для очереди и дека.
Описание диалога При запуске программы создается стек и появляется окно, в которой перечислены операции над стеком. (Рис.1)
Потом выбираем нужный нам пункт к примеру, я выбрал 1 и нажимаем Enter. И сразу внизу появляется запись «введите элемент» водим элемент который мы хотим занести в стек. (рис.2) Выбираем 2 пункт «Удалить элемент». Рис.3 Выбираем 4 пункт «Поиск элемента в стеке». Если веденный пользователем элемент присутствует в стеке, выводится сообщение о нахождении. Рис.4 Аналогично для очереди и дека. Описание процедур и функций В программе были использованы функции, хранящиеся в заголовочных файлах. Список заголовочных файлов из стандартной библиотеки C++, используемых в программе (в описании приведены функции, использующиеся в данной программе): · iostream – в ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод.
Так же были написаны собственные функции для реализации алгоритмов сжатия: 1. void vivod() – вывод стека; 2. void addToTop() – добавление элемента в начало; 3. void addToPos() – добавление элемента в указанную позицию; 4. void delet() – удаление элемента; 5. void poisk() – поиск элемента в стеке. Результаты
Рис.1 Рис.2 Рис.3 Рис.4
ЗАКЛЮЧЕНИЕ Развитие вычислительной техники и программирования сопровождалось эволюцией представлений о роли данных, взглядов на их организацию. В большинстве случаев одним из доминирующих свойств компьютеров является способность хранить огромные объемы информации, к которым можно просто обратиться. Информация, подлежащая обработке, в некотором смысле представляет абстракцию некоторого фрагмента реального мира. Мы говорим о данных как об абстрактном представлении реальности, поскольку некоторые свойства и характеристики реальных объектов при этом игнорируются (как несущественные для данной задачи).
В данной курсовой работе было рассмотрено стековый способ организации данных, организация данных очередью и деком. Также были рассмотрены создание стека, очереди и дека. Добавление элемента, удаление элемента, поиск элемента. Данные способы организации данных в основном применятся в различных алгоритмах(поиск в глубину, полный перебор). Приложение 1 #include <iostream> #include <conio.h> using namespace std;
struct stack { int a; stack *pred; };
void postr(stack *&top, int size) { int x;
for (int i = 1; i <= size; i++) { if (top == NULL) { top = new stack; cout << "Введите значение:"; cin >> x; top->a = x; top->pred = NULL; } else { stack *p = new stack; std::cout << "Введите значение след. элемента:"; std::cin >> x; p->a = x; p->pred = top; top = p; } } }
void vivod(stack *top, int size) { stack *p = top; cout << "stack:"; while (p!= NULL){ cout << p->a; p = p->pred; } cout << endl; } void addToTop(stack *&top, int &size) { size = size + 1; stack *p = new stack; int dz; cout << "\nДобавить элемент в начало:"; cin >> dz; p->a = dz; p->pred = top; top = p; } void addToPos(stack *&top, int size){ stack *p = top;
stack* newElem = new stack; int pos; cout << "На какую позицию вы хотите вставить элемент?" << endl; cin >> pos; if ((pos - size) > 1){ //Если пользователь введет позицию, больше чем размер стека pos = size + 1; } if (pos == 1){ addToTop(top, size); return; } cout << "Введите значение 'a' элемента:"; cin >> newElem->a;
for (int i = 1; i <= pos - 2; i++){ p = p->pred; } newElem->pred = p->pred; p->pred = newElem; } void delet(stack *&top, int size) { stack *p = top; cout << "\nудалить элемент из позиции: "; int delPos; cin >> delPos; if (delPos < 1 || delPos > size){ //Если будет введена недопустимая позиция cout << "Недопустимая позиция. Выход из функции..." << endl; return; } if (delPos == 1){ cout << "Удаляем голову..." << endl; top = top->pred; delete p; return; } for (int i = 1; i <= delPos - 2; i++){ p = p->pred; } stack *boof = p->pred; p->pred = boof->pred; delete boof; } void poisk(stack *&top, stack *&p) { std::cout << "\nВедите искомое значение:"; int b; std::cin >> b;
p = top; while (p) { if (p->a == b) { std::cout << "\nДанный элемен присуствует в стеке"<<std::endl; break; } p = p->pred; } if (p == NULL) { std::cout << "\nЭлемент ненайден" << std::endl;
} }
int main() { setlocale(LC_ALL, "Russian"); int size;
cout << "Стек состоит из:" <<endl; std::cin >> size;
stack *top = NULL; stack*p = NULL; postr(top, size); system("cls"); vivod(top, size); char number; do { cout << "1. Добавить элемент" << endl; cout << "2. Удалить элемент" << endl; cout << "3. Добавить элемент в начало " << endl; cout << "4. поиск элемента в очереди " << endl; cout << "0. Выйти" << endl; cout << "Номер команды > "; cin >> number; switch (number) { case '1': addToPos(top, size); vivod(top, size); break; case '2': delet(top, size); vivod(top, size); break; case '3': addToTop(top, size); vivod(top, size); break;
case'4': poisk(top,p); case'0': break; default: cout << endl << "Команда не определена\n\n"; break; } } while (number!= '0'); //_getch(); return 0; } Приложение 2 #include<iostream> #include<conio.h> #include<Windows.h>
using namespace std; struct qucue { int a; qucue *next; };
void postr(qucue *&top, int size) { int x; qucue *tail = NULL;
for (int i = 1; i <= size; i++)
if (top == NULL) { top = new qucue; std::cout << "Ведите главный элемент:"; std::cin >> x; top->a = x; top->next = NULL; tail = top;
} else { qucue *p = new qucue; std::cout << "Ведите значение:"; std::cin >> x; p->a = x; p->next = NULL; tail->next = p; tail = p; } } void vivod(qucue *&top,int &size) { qucue *p = top; cout << "qucue:"; for (int i = 1; i <=size; i++) {
std::cout << p->a; p = p->next;
} cout << std::endl; } void addToTop(qucue *&top, int &size) { size = size + 1; qucue*p = new qucue; int dz; std::cout << "\nДобавить элемент в начало:"; std::cin >> dz; p->a = dz; p->next = top; top = p; } void addToPos(qucue *&tail,qucue *&top, int &size){ qucue *p = top;
qucue* newElem = new qucue; int pos; std::cout << "На какую позицию вы хотите вставить элемент?" << std::endl; std::cin >> pos; if ((pos - size) > 1){ //Если пользователь введет позицию, больше чем размер pos = size + 1; } if (pos == 1){ tail->next = p; tail = p;
return; } std::cout << "Введите значение 'a' элемента:"; std::cin >> newElem->a;
for (int i = 1; i <= pos - 2; i++){ p = p->next; } newElem->next = p->next; p->next = newElem;
} void delet(qucue *&top, int &size) { qucue *p = top;
std::cout << "\nудалить элемент из позиции: "; int delPos; std::cin >> delPos; if (delPos < 1 || delPos > size){ //Если будет введена недопустимая позиция std::cout << "Недопустимая позиция. Выход из функции..." << std::endl; return; } if (delPos == 1){ std::cout << "Удаляем голову..." << std::endl; top = top->next; delete p; size = size - 1; return; } for (int i = 1; i <= delPos - 2; i++){ p = p->next; } qucue *boof = p->next; p->next = boof->next; delete boof; size = size - 1; } void poisk(qucue *&top, qucue *&p) { std::cout << "\nВедите искомое значение:"; int b; std::cin >> b; p = top; while (p) { if (p->a == b) { std::cout << "\nДанный элемен присуствует в очереди"; break; } p = p->next; } if (p == NULL) { std::cout << "\nЭлемент ненайден";
} }
int main() {
setlocale(LC_ALL, "Russian"); int size; std::cout << "Очередь состоит из:"; std::cin >> size; qucue *tail = NULL; qucue *top = NULL; qucue *p = NULL; postr(top, size); system("cls"); vivod(top, size); char number; do { cout << "1. Добавить элемент" << endl; cout << "2. Удалить элемент" << endl; cout << "3. Добавить элемент в начало " << endl; cout << "4. поиск элемента в очереди " << endl; cout << "0. Выйти" << endl; cout << "Номер команды > "; cin >> number; switch (number) { case '1': addToPos(tail, top, size); vivod(top, size); break; case '2': delet(top, size); vivod(top, size); break; case '3': addToTop(top, size); vivod(top, size); break;
case'4': poisk(top, p); case'0': break; default: cout << endl << "Команда не определена\n\n"; break; } } while (number!= '0'); //_getch(); return 0;
}
Приложение 3 #include <iostream> #include <conio.h> using namespace std; struct decue { int a; decue *pred; decue *next; };
void postr(decue *&tail, decue *&top, int size) { int x; for (int i = 1; i <= size; i++) if (top == NULL) { top = new decue; top->pred = NULL; top->next = NULL; std::cout << "Vedite pervoe znachenie:"; std::cin >> x; top->a = x; tail = top; //На данном этапе и хвост и голова указывают на один и тот же элемент } else { decue *p = new decue; cout << "Vedite znachenie:"; cin >> x; p->a = x; tail->pred = p; p->pred = NULL; p->next = tail; tail = p; } } void vivod(decue *&top, int size) { decue *p = top; cout << "deque:"; while (p!= NULL){ cout << " " << p->a; p = p->pred; } } void add(decue *&top, int &size) {
decue *p = new decue; int dz; cout << "\nдобавить число в начало:";
cin >> dz; size = size + 1;
p->a = dz; p->pred = top; p->next = NULL;
top->next = p; top = p; } void addToPos(decue *&tail, decue *&top, int &size){ decue *p = top;
decue* newElem = new decue; int pos; std::cout << "\nНа какую позицию вы хотите вставить элемент?" << std::endl; std::cin >> pos; if ((pos - size) > 1){ //Если пользователь введет позицию, больше чем размер pos = size + 1; } if (pos == 1){ add(top, size); return; } std::cout << "Введите значение 'a' элемента:"; std::cin >> newElem->a;
for (int i = 1; i <= pos - 2; i++){ p = p->pred; } newElem->pred = p->pred; newElem->next = p->next; p->pred = newElem;
} void delet(decue *&top, int &size) { decue*p = top;
std::cout << "\nудалить элемент из позиции: "; int delPos; std::cin >> delPos; if (delPos < 1 || delPos > size){ //Если будет введена недопустимая позиция std::cout << "Недопустимая позиция. Выход из функции..." << std::endl; return; } if (delPos == 1){ std::cout << "Удаляем голову..." << std::endl; top = top->next; delete p; size = size - 1; return; } for (int i = 1; i <= delPos - 2; i++){ p = p->pred; } decue *boof = p->pred; p->pred = boof->pred; p->next = boof->next; delete boof; size = size - 1; }
int main() {
setlocale(LC_ALL, "Russian"); decue *top = NULL; decue *tail = NULL; //Хвост int size;//размер
cout << "Сколько элементов в деке:"; cin >> size; postr(tail, top, size); system("cls"); vivod(top, size); cout << endl; char number; do { cout << "1. Добавить элемент" << endl; cout << "2. Удалить элемент" << endl; cout << "3. Добавить элемент в начало " << endl; cout << "0. Выйти" << endl; cout << "Номер команды > "; cin >> number; switch (number) { case '1': addToPos(tail, top, size); vivod(top, size); cout << endl; break; case '2': delet(top, size); vivod(top, size); cout << endl; break; case '3': add(top, size); vivod(top, size); break; case'0': break; default: cout << endl << "Команда не определена\n\n"; break; } } while (number!= '0'); return 0;} Список литературы 1. Айламазян А. К., Информатика и теория развития. - М.: Наука, 1992. 2. Говорухин В. Н., Цибулин В. Г. Компьютер в математическом исследовании. \ Учебный курс. - СПб.: Питер, 2001. 3. Гук М.Ю. Процессоры Intel от 8086 до Pentium II. СПб.: Питер, 1997 5. Данчула А. Н. Информатика Издательство РАГС, 2004- 528 6. Дьяконов В. П. Компьютерная математика. Теория и практика. /В. П. Дьяконов. - М. 2001. 7.Зелковиц М. Языки программирования: разработка и реализация 8. Каймин В.А. Информатика: Учебник. - М.: ИНФРА-М,2000. - 232 с. - (Серия «Высшее образование»). 9. Могилев А. В., Пак Н. И., Хеннер Е. К., Информатика, М., «Академия», 2004. 10. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. М.: Компьютер, 1992. 11. Павловская Т. А. С/С++. Программирование на языке высокого уровня. Питер - 2005.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|