ChameL1oN

Лаба2_2(4 вар.)

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