Работа со структурами данных: программирование списков на языке C /C++

Автор работы: Пользователь скрыл имя, 14 Мая 2012 в 15:59, курсовая работа

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

В течение многих лет стандартом C де-факто была версия, поставляемая для операционной системы UNIX System V. Растущая популярность компьютеров привела к созданию множества приложений для C.
C часто называют языком среднего уровня. Это определение означает, что он объединяет элементы языков высокого уровня с функциональностью ассемблера.
Известно, какое значение приобретает сегодня объектно-ориентированное программирование, учитывая возрастающие требования к качеству, надежности и пользовательскому интерфейсу приложений. Сложность и объем программ все время растут. В свете этого объектно-ориентированные языки, и прежде всего C++, становятся едва ли не единственным средством решения встающих перед программистом задач.

Содержание работы

ВВЕДЕНИЕ 3
1 ПОСТАНОВКА ЗАДАЧИ 4
1.1 Общая характеристика задачи 4
1.2 Динамические двусвязные списки 5
2 РАЗРАБОТКА АЛГОРИТМА ЗАДАЧИ 14
2.1 Описание данных, используемых для решения задачи 14
2.2 Описание схемы программы 14
3 КОДИРОВАНИЕ ПРОГРАММЫ 15
3.1 Описание структуры разрабатываемого пакета 15
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ 20
4.1 Внешний вид программы 20
4.2 Работа программы 20
ЗАКЛЮЧЕНИЕ 24
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ: 25
ПРИЛОЖЕНИЕ А (ДИНАМИЧЕСКИЙ ДВУНАПРАВЛЕННЫЙ СПИСОК) 26

Файлы: 1 файл

динамический двунаправленый список.doc

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

                            avtoticket* next; //Ссылка на следущий элемент списка

                            avtoticket* prev; //Ссылка на следущий элемент списка

};

                            struct dyn_list {

                            avtoticket* head; // Первый элемент (голова) списка

                            avtoticket* tail; // Последний элемент (хвост) списка

              };

 

// Создание пустого списка

void constr_list(dyn_list &l)

{

              l.head = NULL;

}

// Проверка списка на пустоту

bool chk_empty(dyn_list l)

{

              return (l.head==NULL);

}

 

int kol;

int koll;

// Включение в список нового компонента

void avtoticket_in(dyn_list &l, char* m, char* o,int p, int r,char* a)

{

              koll++;

              avtoticket* c = new avtoticket();

              strcpy_s(c->num, 20, m);

              strcpy_s(c->marsh, 10, o);

    c->hour=p;

              c->min=r ;

              strcpy_s(c->price, 10, a);

              c->next = NULL;

              if (chk_empty(l))

                            l.head = c;

              else

                            l.tail->next = c;

              l.tail = c;

}

void show(dyn_list &l) // Вывод всего списка

{

              cout <<"Number: Marshrut: Vremya(h): Vremya(m): Price  "<<endl;

     while (l.head != NULL)

              {

              cout <<l.head->num<<"        ";

              cout <<l.head->marsh<<"        ";

              cout <<l.head->hour<<"         ";

              cout <<l.head->min<<"          ";

              cout <<l.head->price<<endl;

              l.head = l.head->next;

              }

}

void showone(dyn_list &l,avtoticket* h)// Вывод одного элемента(используктся в теле функции поиска по параметру)

{

              cout <<"Number: Marshrut: Vremya(h): Vremya(m): Price  "<<endl;

    l.head != h;

              cout <<l.head->num<<"        ";

              cout <<l.head->marsh<<"        ";

              cout <<l.head->hour<<"         ";

              cout <<l.head->min<<"          ";

              cout <<l.head->price<<endl;

             

}

// Поиск компонента в списке по времени с 7 до 8

avtoticket* search(dyn_list l)

{

              while (l.head != NULL)

              {

                            if ((l.head->hour==7) | ((l.head->min==0) & (l.head->hour==8)))

                            {

                                          showone(l,l.head);

                            }

                            l.head = l.head->next;

              }

              return l.head;

}

avtoticket* searchnum(dyn_list l, char *a)// Поиск компонента в списке по номеру маршрута

{

              while (l.head != NULL)

              {

                            if (!strcmp(l.head->num,a))

                            {

                                          showone(l,l.head);

                            }

                            l.head = l.head->next;

              }

              return l.head;

}

 

avtoticket* searchdel(dyn_list l, char *a)// Поиск компонента в списке для удаления по определенному ключу(в данном случае по маршруту)

{

              while (l.head != NULL)

              {

                            if (!strcmp(l.head->marsh,a))

                            {

                                          return l.head;;

                            }

                            l.head = l.head->next;

              }

              return l.head;

}

 

// Удаление компонента из списка

void avtoticket_del(dyn_list &l, avtoticket* c)

{

              if (c == l.head)

              {

                            l.head = c->next;

                            return;

              }

              avtoticket* r = new avtoticket();

              r = l.head;

              while (r->next != c)

                            r = r->next;

              r->next = c->next;

              delete c;

}

 

void show_menu ()// реализация меню в программе

{

   cout << "Press any of this keys..." << endl;

   cout << setiosflags (ios::left)

        << setw (15) << "[ 1 - Add ] "<< endl

        << setw (15) << "[ 2 - Show all ] "

        << setw (15) << "[ 3 - Tickets 7-8 PM ]"

        << setw (15) << "[ 4 - Delete All ]"<< endl

                            << setw (15) << "[ 5 - Find of number marsh ]"

                            << setw (15) << "[ 6 - Delete on position]"

        << endl << endl;

}

 

int main()//основная программа

{

 

              char* buf_num = new char[20];

              char* buf_marsh = new char [10];

              int buf_hour ;

              int buf_min;

              char* buf_price = new char [10];

              avtoticket* r=NULL;             

              avtoticket* rr=NULL;

              avtoticket* p = new avtoticket();

              dyn_list vars; // Динамический список

              show_menu();

 

int key=1;

int count=0;

              constr_list(vars);

   while (key)

   {

      cout<< "Enter(1-8): ";

                cin >> key;

      switch (key)

      {

         // add

         case 1:

                           

            cout << "Enter number: "; cin >> buf_num;

            cout << "Enter the marshrut: "; cin >> buf_marsh;

            cout << "Enter hour: "; cin >>buf_hour;

            cout << "Enter minutes: "; cin >>buf_min;

                                          cout << "Enter price: "; cin >>buf_price;

            avtoticket_in(vars, buf_num, buf_marsh,buf_hour,buf_min,buf_price);

            break;

 

         // show all

         case 2:

            r=vars.head;

                      show(vars);

                      vars.head=r;

            break;

 

         // find

         case 3:

                                          r=vars.head;

                      p = search(vars);

 

                                          vars.head=r;

            break;

                            // delete all

          case 4: 

                              r=vars.head;

           for (int t=0; t<koll;t++)

                               {

                               vars.head->next;

                               avtoticket_del(vars,vars.head);

                               }

                               cout << "kol-vo: "<<koll<<endl;

                              r=vars.head;

          break;

          case 5: 

            r=vars.head;

                                          cout << "Vvedite nomer: "; cin >> buf_num;

                      p = searchnum(vars, buf_num);

                                          vars.head=r;

          break;

                              case 6: 

            r=vars.head;

                                          cout << "Vvedite marsh for delete: "; cin >> buf_marsh;

                      p = searchdel(vars, buf_marsh);

                                          if (p)

                                                        avtoticket_del(vars, p);

                                          vars.head=r;

          break;

 

           }

          }

             

}

 



Информация о работе Работа со структурами данных: программирование списков на языке C /C++