ChameL1oN

Лаба2_1(13 вар.)

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