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

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

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

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

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

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

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



















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

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

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

















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

 группы ВТК-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();

}



 























Схема





main

загрузка

сохранение

Удаление всего списка

Удаление одного элемента

Вывод на экран

вставка

Выход

меню





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





2