Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct dll_node
  5. {
  6. int data;
  7. struct dll_node *prev , *next;
  8. };
  9.  
  10. struct dll_node *create_list(int data)
  11. {
  12. struct dll_node *new_node=(struct dll_node *)
  13. malloc(sizeof(struct dll_node));
  14. if(NULL!=new_node)
  15. {
  16. new_node->data=data;
  17. new_node->prev=new_node->next=new_node;
  18. }
  19. return new_node;
  20. };
  21.  
  22. struct dll_node *find_max_node(struct dll_node *node)
  23. {
  24. struct dll_node *start=node, *result=node;
  25. int maximum=node->data;
  26. do
  27. {
  28. if(maximum<node->data)
  29. {
  30. maximum=node->data;
  31. result=node;
  32. }
  33. node = node->next;
  34. }while(node!=start);
  35. return result;
  36. };
  37.  
  38. struct dll_node *find_next_node(struct dll_node *node, int data)
  39. {
  40. node=find_max_node(node);
  41. struct dll_node *start = node;
  42. do
  43. {
  44. if(node->data < data)
  45. break;
  46. node=node->next;
  47. }while (node!=start);
  48. return node;
  49. };
  50.  
  51. void insert_node(struct dll_node *node, int data)
  52. {
  53. if(NULL == node)
  54. return;
  55.  
  56. struct dll_node *new_node=(struct dll_node *)
  57. malloc(sizeof(struct dll_node));
  58. if(NULL!=new_node)
  59. {
  60. new_node->data=data;
  61. node=find_next_node(node,data);
  62. new_node->next=node;
  63. new_node->prev=node->prev;
  64. node->prev->next=new_node;
  65. node->prev=new_node;
  66. }
  67. }
  68.  
  69. struct dll_node *delete_node(struct dll_node *node, int data)
  70. {
  71. if(NULL==node)
  72. return NULL;
  73.  
  74. node = find_next_node(node,data);
  75. node-node->prev;
  76. if(node->data==data)
  77. {
  78. if(node==node->next)
  79. {
  80. free(node);
  81. return NULL;
  82. }
  83. else
  84. {
  85. struct dll_node *next = node->next;
  86. node->prev->next=node->next;
  87. node->next->prev=node->prev;
  88. free(node);
  89. node=next;
  90. }
  91. }
  92. return node;
  93. };
  94.  
  95. void print_list(struct dll_node *node)
  96. {
  97. if(NULL==node)
  98. return;
  99.  
  100. node=find_max_node(node);
  101. struct dll_node *start = node;
  102. do
  103. {
  104. printf("%d",node->data);
  105. node=node->next;
  106. }while(node!=start);
  107. printf("\n");
  108. }
  109.  
  110. void remove_list(struct dll_node **node)
  111. {
  112. if(NULL==*node)
  113. return;
  114.  
  115. struct dll_node *start = *node;
  116. do
  117. {
  118. struct dll_node *next=(*node)->next;
  119. free(*node);
  120. *node=next;
  121. }while(*node!=start);
  122. *node=NULL;
  123. }
  124.  
  125. int main()
  126. {
  127. struct dll_node *dlcl=create_list(1);
  128. int i;
  129.  
  130. for(i=2;i<5;i++)
  131. insert_node(dlcl,i);
  132. for(i=6;i<10;i++)
  133. insert_node(dlcl,i);
  134. printf("List elements:\n");
  135. print_list(dlcl);
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement