Смекни!
smekni.com

Разработка линейного однонаправленного списка

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

КУЙБЫШЕВСКИЙ ФИЛИАЛ

Курсовой проект

По дисциплине: Программирование

На тему: « Разработка линейного однонаправленного списка»

Выполнил студент

группы ВТК-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<<"&bsol;n";

rus(" ");cout<<"&bsol;n";

rus(" 1 - Вставка ");cout<<"&bsol;n";

rus(" 2 - Удаление ");cout<<"&bsol;n";

rus(" 3 - Вывод на экран ");cout<<"&bsol;n";

rus(" 4 - Сохранение ");cout<<"&bsol;n";

rus(" 5 - Чтение");cout<<"&bsol;n";

rus(" 6 - Удаление всего списка");cout<<"&bsol;n";

rus(" 0 - Выход ");cout<<"&bsol;n";

rus("==============================");cout<<"&bsol;n";

rus(" Введите пункт меню ");cout<<"&bsol;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<<"&bsol;n";

p=p->next;

}

rus("СОХРАНЕНО!!!"); cout<<"&bsol;n";

}

//-------------------------Print------------------------------------------------

void show(node *z){while(z){cout<<z->x<<"_____"<<z<<"&bsol;n";z=z->next;}}

//--------------------------Запись в структуру------------------------

node* insert(node *p)

{

node *q=new node;

rus("Введите значение &bsol;n");

textcolor(RED);

rus ("!!!не более 15 символов!!!&bsol;n&bsol;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("Ошибка при открытии файла!&bsol;n&bsol;n&bsol;n");

} else

{

while (!inf.eof())

{

inf.getline(str,15); //введенная из файла строка

if (strcmp("",str)) uk = insert(uk, str);

}

rus("Данные успешно загружены!&bsol;n&bsol;n&bsol;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();

}

Схема

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