ChameL1oN

Жел_2

Mar 11th, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <iostream>
  4. #include <locale>
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10. //Стэк. Тип поля - *char . Добавить элемент с указанным номером.
  11.  
  12. struct point{
  13. char* key;
  14. point* next;
  15. point *pred;//указатель на предыдущий элемент
  16. };
  17.  
  18. void print_list(point* beg)
  19. //печать списка
  20. {
  21. point* p = beg;//начало списка
  22. while (p != 0)
  23. {
  24. cout << p->key << "\t";
  25. p = p->next;//переход к следующему элементу
  26. }
  27. }
  28. void print_list2(point* beg)
  29. //печать списка
  30. {
  31. point* p = beg;//начало списка
  32. while (p != 0)
  33. {
  34. cout << p->key << "\t";
  35. p = p->pred;//переход к следующему элементу
  36. }
  37. }
  38.  
  39. point* make_point()
  40. //создание одного элемента
  41. {
  42. point*p = new(point);
  43. p->next = 0; p->pred = 0;//обнуляем указатели
  44. char s[50];
  45. cout << "\nEnter string:";
  46. cin >> s;
  47. p->key = new char[strlen(s) + 1];//выделение памяти под строку
  48. strcpy(p->key, s);
  49. return p;
  50. }
  51. point*make_list(int n)
  52. //создание списка
  53. {
  54. point *p, *beg;
  55. beg = make_point();//создаем первый элемент
  56. for (int i = 1; i<n; i++)
  57. {
  58. p = make_point();//создаем один элемент
  59. //добавление элемента в начало списка
  60. p->next = beg;//связываем р с первым элементом
  61. beg->pred = p;//связываем первый элемент с p
  62. beg = p;// p становится первым элементом списка
  63. }
  64. return beg;
  65. }
  66.  
  67. point* add_point(point* beg, int k){
  68. point* p = beg;
  69. point* r = new point();
  70. int i = 1;
  71. if (k != 1){ //Когда указываем номер > 1
  72. while (p->next != NULL){ //Проходим до конца списка + ищем и запоминаем необходимый эл-т
  73. p = p->next;
  74. i++;
  75. if (i == k) r = p;
  76. }
  77. }
  78. else{ //Если указан номер 1
  79. r = beg;
  80. while (p->next != NULL) p = p->next;
  81. }
  82. point* nwp = new point(); //Создаём новый эл-т и копируем его значения из сохранённого эл-та
  83. nwp->key = r->key;
  84. nwp->next = NULL;
  85. nwp->pred = p; //Вставляем в конец
  86. p->next = nwp;
  87. return beg;
  88. }
  89.  
  90. void main(){
  91. setlocale(LC_ALL, "rus");
  92. int n, k;
  93. bool flag = true;
  94. cout << "Введите кол-во элементов" << endl;
  95. cin >> n;
  96. point* beg = make_list(n);
  97. cout << "Исходный список : " << endl;
  98. print_list(beg);
  99. cout << endl;
  100. while (flag){
  101. cout << "Эл-т под каким номером добавляем? ";
  102. cin >> k;
  103. if (k > n || k < 1)cout << "Неверно указан номер" << endl;
  104. else flag = false;
  105. cout << endl;
  106. }
  107. cout << "Список после добавление элемента" << endl;
  108. cout << endl;
  109. beg = add_point(beg,k);
  110. print_list(beg);
  111. cout << endl;
  112. while (beg->next != 0){ beg = beg->next; }
  113. print_list2(beg);
  114. cout << endl;
  115. for (int i = 0; beg->next != 0; i++){
  116. beg = beg->next;
  117. delete beg->pred;
  118. }
  119. delete beg;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment