Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3. #define SIZE 20
  4. using namespace std;
  5.  
  6. struct node {
  7. int data;
  8. node *pNext;
  9. };
  10.  
  11. node* getNode(int x) {
  12. node *p = new node;
  13. if (p == NULL)
  14. return NULL;
  15. p->data = x;
  16. p->pNext = NULL;
  17. return p;
  18. }
  19.  
  20. //Problem 1b / lab3
  21. void InsertTail(node*& head, int newdata) {
  22. node *p = getNode(newdata);
  23. if (head == NULL)
  24. {
  25. head = p;
  26. }
  27. node *k = head;
  28. for (k; k->pNext != NULL; k = k->pNext)
  29. {
  30. if (k->pNext == NULL) break;
  31. }
  32. k->pNext = p;
  33. p->pNext = NULL;
  34. }
  35.  
  36. //Problem 1a / lab3
  37. node* CreateListRanDom(int n) {
  38. int x;
  39. node *head = NULL;
  40. srand(time(0));
  41. for (int i = 0; i < n; i++)
  42. {
  43. x = rand() % 100; //sinh ngẫu nhiên giá trị x từ 0 -> 99
  44. InsertTail(head, x);
  45. }
  46. return head;
  47. }
  48.  
  49. //Problem 1c / lab3
  50. void InsertHead(node*& head, int newdata) {
  51. node *p = getNode(newdata);
  52. p->pNext = head;
  53. head = p;
  54. }
  55.  
  56. //Problem 1d / lab3
  57. void DeleteData(node *&pHead, int delData) {
  58. node *k = pHead;
  59. node *r = new node;
  60. node *p = new node;
  61.  
  62. //Cái vòng lặp for này là để tìm ra node cuối cùng để thao tác những lệnh đằng sau
  63. node *tail = pHead;
  64. for (tail; tail->pNext != NULL; tail = tail->pNext)
  65. {
  66. if (tail->pNext == NULL)
  67. break;
  68. }
  69.  
  70. //trường hợp node cần xóa nằm ở đầu danh sách
  71. if ((pHead->data) == delData)
  72. {
  73. p = pHead;
  74. pHead = pHead->pNext;
  75. delete p;
  76. }
  77.  
  78. //trường hợp node cần xóa nằm ở cuối danh sách
  79. else if ((tail->data == delData))
  80. {
  81. for (k; k->pNext != tail; k = k->pNext);
  82. delete tail;
  83. tail = k;
  84. k->pNext = NULL;
  85. }
  86.  
  87. ////trường hợp node cần xóa nằm ở giữa danh sách
  88. else
  89. {
  90. for (k; k->pNext; k = k->pNext)
  91. {
  92. if ((k->pNext)->data == delData)
  93. {
  94. p = k->pNext;
  95. r = (k->pNext)->pNext;
  96. break;
  97. }
  98. }
  99. k->pNext = r;
  100. delete p;
  101. }
  102. }
  103.  
  104. void PrintLinkedList(node* head) {
  105. for (node *p = head; p; p = p->pNext)
  106. {
  107. cout << p->data << " ";
  108. }
  109. }
  110.  
  111. int main() {
  112. int n;
  113. cin >> n;
  114. node *LinkedList = CreateListRanDom(n);
  115. InsertHead(LinkedList, 28);
  116. InsertTail(LinkedList, 9);
  117. PrintLinkedList(LinkedList);
  118. int delData;
  119. cout << endl;
  120. cout << "Enter delData: ";
  121. cin >> delData;
  122. DeleteData(LinkedList, delData);
  123. PrintLinkedList(LinkedList);
  124. system("pause");
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement