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

Автор работы: Пользователь скрыл имя, 04 Декабря 2010 в 10:44, Не определен

Описание работы

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

Файлы: 1 файл

курсовая.doc

— 59.50 Кб (Скачать файл)

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

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

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

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

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

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

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

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

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

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

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

} 

  
 
 
 
 
 
 
 
 
 
 

Схема 

 
 

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

Информация о работе Разработка линейного однонаправленного списка