Реферат: Разработка линейного однонаправленного списка
Название: Разработка линейного однонаправленного списка Раздел: Рефераты по информатике Тип: реферат |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» КУЙБЫШЕВСКИЙ ФИЛИАЛ Курсовой проектПо дисциплине: Программирование На тему: « Разработка линейного однонаправленного списка»
Выполнил студент группы ВТК-281 Киселёв С.А. . _______________ (подпись, дата) Проверил: Бычков М.И. Куйбышев 2010 Задание: Разработать программу реализующая следующие элементы списка: Вставка, удаление, вывод на экран, чтение из файла, удаление последнего элемента и удаление всех элементов списка, осуществляет выход из программы. Структурное и функциональное описание программы: //-------------------------------Подключение библиотек-------------------------- #include <iostream> // Стандартные потоки ввода-вывода: // ios,istream,ostream,iostream #include <conio> #include <windows> #include <stdio> #include <stdlib> #include <fstream> // Файловые потоки ввода-вывода: //------------------------Русификатор------------------------------------------------ void rus(char *str) { char buf[100]; CharToOem(str,buf); cout<<buf; return; } //------------------------Вывод на экран меню и запись значения-------------- int menu() {int n; rus(" Меню ");cout<<"\n"; rus(" ");cout<<"\n"; rus(" 1 - Вставка ");cout<<"\n"; rus(" 2 - Удаление ");cout<<"\n"; rus(" 3 - Вывод на экран ");cout<<"\n"; rus(" 4 - Сохранение ");cout<<"\n"; rus(" 5 - Чтение");cout<<"\n"; rus(" 6 - Удаление всего списка");cout<<"\n"; rus(" 0 - Выход ");cout<<"\n"; rus("==============================");cout<<"\n"; rus(" Введите пункт меню ");cout<<"\n"; cin>>n; return n;} // ввод с клавиатуры //----------------------------------------------------------------------------------- struct node{char x[15]; node *next;}; node *un=NULL; //создаём указатели на начало списка node *uk=un; //создаём указатель на конец списка node *r,*pre; //ещё 2 указателя int count; //--------------------------------Удаление всего списка------------------------- void dellist(node *p) // функция удаления { while(p){delete p; p=p->next; } uk=un; } //----------------------------------Удаление------------------------------------ void delet(node*p) { node *h=p; if(p==uk) { uk=p->next;delete h; } else { node *f=p->next; p->next=(p->next)->next; delete f; } } //-----------------------------------Сохранение--------------------------------- void save(node *p) { ofstream out("a.txt"); while(p) { out<<p->x<<"\n"; p=p->next; } rus("СОХРАНЕНО!!!"); cout<<"\n"; } //-------------------------Print------------------------------------------------ void show(node *z){while(z){cout<<z->x<<"_____"<<z<<"\n";z=z->next;}} //--------------------------Запись в структуру------------------------ node* insert(node *p) { node *q=new node; rus("Введите значение \n"); textcolor(RED); rus ("!!!не более 15 символов!!!\n\n"); gotoxy(1.5,wherey()); cin>>q->x; q->next=p; return q; } //--------------------------Запись в структуру---------------------------------- node* insert(node *p, char* str) { node *q=new node; strcpy(q->x, str); //функция копирования q->next=p; return q; // функция возвращения переменной } int GetCountEl(node *p) { int n = 0; while(p) //цикл с предусловием { n++; p=p->next; } return n; } char* getEl(const int &num) { if(num < count) // структура (вид – ветвление) { node *p = uk; for(int i=0; i<num; i++) p = p->next; return p->x; } else return 0; // иначе возвращается 0 } void exchange(const int &dpos, const int &spos) { if((dpos<count)&&(spos<count)) { int i; char* temp; temp = new char[15]; node *dest = uk; node *source = uk; for(i=0;i<dpos;i++) dest = dest->next; for(i=0;i<spos;i++) source = source->next; strcpy(temp, source->x); strcpy(source->x, dest->x); strcpy(dest->x, temp); } } //--------------Загрузка-------------------------- loading() { char *str; str = new char[15]; ifstream inf("a.txt"); if (!inf) { rus("Ошибка при открытии файла!\n\n\n"); } else { while (!inf.eof()) { inf.getline(str,15); //введенная из файла строка if (strcmp("",str)) uk = insert(uk, str); } rus("Данные успешно загружены!\n\n\n"); } } //-------------------------Главная функция----------------------------------- int main() { int n=1; while(n){char x[15]; n=menu(); switch(n) // оператор выбора { case 1:clrscr(); cin>>x; uk=insert(uk,x);break; case 2:clrscr();delet(uk);break; case 3:clrscr();show(uk);break; case 4:clrscr();save(uk);break; case 5:clrscr();loading();break; case 6:clrscr();dellist(uk);break; case 0:clrscr();exit(0); } } getch(); } Схема Вывод: эта программа выполняет ввод данных с клавиатуры, сохранение в файл и чтение из него; удаление элементов или всего списка, осуществляет просмотр и выход из программы, то есть она выделяет динамическую память для ввода данных с клавиатуры, сохраняет данные в файл. Можно загрузить данные из файла. Редактирует список с помощью удаления элемента списка, а так же возможно удалить список полностью и начать заполнение списка заново. |