Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "function.h"
  4.  
  5. size_t sz = 0;
  6.  
  7. Node *newNode(unsigned short val) {
  8. Node *temp = (Node *)malloc(sizeof(Node));
  9. temp->val = val;
  10. temp->prev = temp->next = NULL;
  11. return temp;
  12. }
  13.  
  14. void do_I(Node **head, size_t pos, unsigned short val) {
  15. ++sz;
  16. if (head == NULL || *head == NULL || sz - 1 == 0) {
  17. *head = newNode(val);
  18. (*head)->next = (*head)->prev = *head;
  19. return ;
  20. }
  21. if (pos == 0) {
  22. Node *temp = newNode(val);
  23. Node *last = (*head)->prev;
  24. temp->prev = last;
  25. last->next = temp;
  26. temp->next = *head;
  27. (*head)->prev = temp;
  28. *head = temp;
  29. return ;
  30. }
  31. if (pos > sz - 1)
  32. pos = sz - 1;
  33. Node *node = *head;
  34. for (size_t i = 1; i < pos; i++)
  35. node = node->next;
  36. Node *temp = newNode(val);
  37. Node *nxt = node->next;
  38. temp->prev = node;
  39. node->next = temp;
  40. temp->next = nxt;
  41. nxt->prev = temp;
  42. }
  43.  
  44. void do_E(Node **head, size_t begin_pos, size_t end_pos) {
  45. if (head == NULL || *head == NULL)
  46. return ;
  47. if (begin_pos > sz)
  48. begin_pos = sz;
  49. if (end_pos > sz)
  50. end_pos = sz;
  51. if (begin_pos >= end_pos)
  52. return ;
  53. if (begin_pos == 0 && end_pos == sz) {
  54. sz = 0;
  55. *head = NULL;
  56. return ;
  57. }
  58. sz -= (end_pos - begin_pos);
  59. if (begin_pos == 0) {
  60. Node *last = (*head)->prev;
  61. for (size_t i = 0; i < end_pos; i++)
  62. *head = (*head)->next;
  63. (*head)->prev = last;
  64. last->next = *head;
  65. return ;
  66. }
  67. Node *node = *head;
  68. for (size_t i = 1; i < begin_pos; i++)
  69. node = node->next;
  70. Node *node2 = *head;
  71. for (size_t i = 0; i < end_pos; i++)
  72. node2 = node2->next;
  73. node->next = node2;
  74. node2->prev = node;
  75. }
  76.  
  77. void do_R(Node **head, unsigned short val) {
  78. if (head == NULL || *head == NULL)
  79. return ;
  80. Node *node = *head;
  81. size_t s = sz;
  82. for (size_t i = 0; i < s; i++) {
  83. if (node->val == val) {
  84. --sz;
  85. if (sz == 0) {
  86. *head = NULL;
  87. return ;
  88. }
  89. if (node == *head) {
  90. *head = node->next;
  91. Node *last = node->prev;
  92. (*head)->prev = last;
  93. last->next = *head;
  94. } else {
  95. Node *pre = node->prev;
  96. Node *nxt = node->next;
  97. pre->next = nxt;
  98. nxt->prev = pre;
  99. }
  100. }
  101. node = node->next;
  102. }
  103. }
  104.  
  105. void do_P(Node *head, size_t pos) {
  106. if (head == NULL)
  107. return ;
  108. if (pos >= sz)
  109. pos = sz - 1;
  110. for (size_t i = 0; i < pos; i++)
  111. head = head->next;
  112. printf("%hu ", head->val);
  113. }
  114.  
  115. void do_S(Node *head) {
  116. if (head == NULL)
  117. return ;
  118. for (size_t i = 0; i < sz; i++) {
  119. printf("%hu ", head->val);
  120. head = head->next;
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement