Исходник программы - производный класс параметризованного списка: циклический односвязный список на Си(C++)


Добавил:DMT
Дата создания:29 апреля 2008, 17:30
Дата обновления:29 апреля 2008, 17:30
Просмотров:11846 последний позавчера, 16:37
Комментариев: 0
Исходник программы - производный класс параметризованного списка: циклический односвязный список на Си(C++)
Класс списка:Циклический односвязный список
Тип данных: Число по модулю n
Код на C++
  1. #include <conio.h>
  2. #include <iostream.h>
  3. #include <stdlib.h>
  4. #define N 2
  5. template <class DataT> class listob;
  6. template <class DataT> class listob
  7. {public:
  8. DataT info;
  9. listob<DataT> *next;
  10. listob()
  11. {info=0; next=NULL;}
  12. listob(DataT c)
  13. {info=(int)c%N; next=NULL;}
  14. void getinfo(DataT &c){c=info;}
  15. void operator<<(DataT b)
  16. {info=(int)b%N; }};
  17. template <class DataT>
  18. class dlist: public listob<DataT>
  19. {listob<DataT> *start;
  20. public:
  21. dlist(){start=NULL;}
  22. ~dlist();
  23. void tostart(DataT);
  24. void toend(DataT);
  25. void delstart(void);
  26. void delend(void);
  27. void show();
  28. listob<DataT> *getstart(){return start;} };
  29. template <class DataT> dlist<DataT>::~dlist()
  30. { listob<DataT> *p, *p1;
  31. p=start;
  32. while(p!=start)
  33. { p1=p->next;
  34. delete p;
  35. p=p1;}}
  36. template <class DataT> void dlist<DataT>::tostart(DataT c)
  37. {listob<DataT> *p;
  38. p= new listob<DataT>;
  39. *p<<c;
  40. if(start==NULL)
  41. { start=p;
  42. start->next=start; }
  43. else
  44. {p->next=start->next;
  45. start->next=p;}}
  46. template <class DataT> void dlist<DataT>::toend(DataT c)
  47. { tostart(c);
  48. start=start->next;}
  49. template <class DataT> void dlist<DataT>::delstart(void)
  50. {if(start==0||start==start->next){start=0;return;}
  51. listob<DataT> *p;
  52. p=start->next;
  53. start->next=(start->next)->next;
  54. delete p;}
  55. template <class DataT> void dlist<DataT>::delend(void)
  56. {if(start==0||start==start->next){start=0;return;}
  57. listob<DataT>* p= new listob<DataT>;
  58. p=start;
  59. while(p->next!=start)
  60. p=p->next;
  61. start=p;
  62. delstart();}
  63. template <class DataT>
  64. void dlist<DataT>::show(void)
  65. {if(start==NULL){cout<<"Список пуст";return;}
  66. listob<DataT> *t=start;
  67. do{t=t->next;cout<<t->info<<" ";}while(t!=start);}
  68. void main (void)
  69. {clrscr();
  70. dlist<int> list;
  71. list.tostart(1);
  72. list.tostart(2);
  73. list.tostart(3);
  74. list.tostart(5);
  75. list.tostart(6);
  76. cout<<"Исходный список\n";
  77. list.show();
  78. cout << "\nУдаление с начала\n";
  79. list.delstart();
  80. list.show();
  81. cout << "\nДобавление в конец 4\n";
  82. list.toend(4);
  83. list.show();
  84. cout<<"\nУдаление с конца\n";
  85. list.delend();
  86. list.show();
  87. getch();}
  88.  
При использовании обязательна ссылка на http://DMTSoft.ru
up