Advertisement
leo11

List in C v2

Mar 22nd, 2021
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.52 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. static unsigned int count = 0;
  6.  
  7. typedef struct List{
  8.     int data;
  9.     struct List* next;
  10.     struct List* prev;
  11. }Node;
  12.  
  13. void creatNode(Node* head, int data)
  14. {
  15.     count++;
  16.     while(head->next != NULL)
  17.         head = head->next;
  18.    
  19.     Node* cur = (Node*) malloc(sizeof(Node));
  20.     cur->data = data;
  21.     head->next = cur;
  22.     cur->prev = head;
  23.     cur->next = NULL;
  24. }
  25.  
  26. void printListForward(Node *head)
  27. {
  28.     // for (int i = 0; i < count; i++){
  29.     //     printf("%d ", head->data);
  30.     //     head = head->next;
  31.     // }
  32.     // printf("\n");
  33.  
  34.     while (head != NULL){
  35.         printf("%d ", head->data);
  36.         head = head->next;
  37.     }
  38.     printf("\n");
  39. }
  40.  
  41. void printListBackward(Node *head)
  42. {
  43.     while(head->next != NULL)
  44.         head = head->next;
  45.  
  46.     // for (int i = count; i > 0; i--)
  47.     // {
  48.     //     printf("%d ", head->data);
  49.     //     head = head->prev;
  50.     // }
  51.     while(head != NULL)
  52.     {
  53.         printf("%d ", head->data);
  54.         head = head->prev;
  55.     }
  56.  
  57.     printf("\n");
  58.  
  59. }
  60.  
  61. void pushForward(Node* head, int data)
  62. {
  63.     count++;
  64.     while(head->next != NULL){
  65.         head = head->next;
  66.     }
  67.     Node* new = (Node*) malloc (sizeof(Node));
  68.     new->data = data;
  69.     head->next = new;
  70.     new->next = NULL;
  71.     new->prev = head;
  72. }
  73.  
  74. // void anotherPrint(Node* head){
  75. //     for (int i = 0; i < count; i++)
  76. //     {
  77. //         printf("%d ", head->data);
  78. //         head = head->next;
  79. //     }
  80. //     printf("\n");
  81. // }
  82.  
  83. void pushBack(Node* head, int data)
  84. {
  85.     count++;
  86.  
  87.     Node* new = (Node*) malloc (sizeof(Node));
  88.     Node* tmp = (Node*) malloc (sizeof(Node));
  89.    
  90.     *tmp = *head;
  91.  
  92.     // head->prev = head;
  93.  
  94.     new->next = new;
  95.     new->prev = NULL;
  96.     new->data = data;
  97.     *head = *new;
  98.     *new = *tmp;
  99.     tmp->next->prev = new;
  100.     new->prev = head;
  101.    
  102.  
  103.     // new->data = data;
  104.     // new->prev = NULL;
  105.     // new->next = head;
  106.     // head->prev = new;
  107.     // *head = *new;
  108.     // *new = *tmp;
  109.  
  110.     // *head = *new;
  111.     // *new = *tmp;
  112.     // head->prev = NULL;
  113.     // head->next = new;
  114.     // head->data = data;
  115.     // new->data = tmp->data;
  116.     // new->next = tmp->next;
  117.     // new->prev = head;
  118.     // tmp->next->prev = new;
  119.  
  120. }
  121.  
  122. void insertElemInd(Node* head, int data, int index)
  123. {
  124.     // count++;
  125.     Node* cur = (Node*) malloc (sizeof(Node));
  126.     cur->data = data;
  127.     for (int i = 1; i < index; i++)
  128.         head = head->next;
  129.    
  130.     Node* tmp = (Node*) malloc(sizeof(Node));
  131.  
  132.     *tmp = *head;
  133.     head->next = cur;
  134.     cur->next = tmp->next;
  135.     cur->prev = head;
  136.     tmp->next->prev = cur;
  137.     free(tmp);
  138.     count++;
  139. }
  140.  
  141. void insertElem(Node* head, int data, int afterData)
  142. {
  143.     count++;
  144.     Node* cur = (Node*) malloc (sizeof(Node));
  145.     cur->data = data;
  146.     while(head->data != afterData)
  147.         head = head->next;
  148.  
  149.     Node* tmp = (Node*) malloc (sizeof(Node));
  150.  
  151.     *tmp = *head;
  152.     head->next = cur;
  153.     cur->next = tmp->next;
  154.     tmp->next->prev = cur;
  155.     cur->prev = head;
  156.  
  157.     free(tmp);
  158. }
  159.  
  160. void deleteElem(Node* head, int elem)
  161. {
  162.     while (head != NULL)
  163.     {
  164.         if (head->data == elem)
  165.         {
  166.             if (head->prev != NULL && head->next == NULL){
  167.                 head->prev->next = NULL;
  168.                 count--;
  169.                 // free(head);
  170.                 return;
  171.             }
  172.             else if(head->prev != NULL){
  173.                 head->prev->next = head->next;
  174.                 head->next->prev = head->prev;
  175.                 count--;
  176.                 // free(head);
  177.                 return;
  178.             }
  179.             else
  180.             {
  181.                 // head->next->prev = NULL;
  182.                 Node* tmp = head;
  183.                 tmp = tmp->next;
  184.                
  185.                 // tmp->prev->data = 155;
  186.                 // tmp->data = 1222;
  187.                 tmp->prev = NULL;
  188.                 // printf("head %p\n", head);
  189.                 // printf("tmp %p\n", tmp);
  190.                 *head = *tmp;
  191.  
  192.                 count--;
  193.                 return;
  194.             }
  195.         }
  196.         head = head->next;
  197.     }
  198.     printf("No one elem found!\n");
  199. }
  200.  
  201. // void qw(char* str){
  202. //     printf("%p\n", str);
  203. //     while (*(str++))
  204. //         printf("%c", *str);
  205. //     printf("%p\n", str);
  206. // }
  207.  
  208.  
  209. int main()
  210. {  
  211.     Node* head = (Node*) malloc (sizeof(Node));
  212.     count++;
  213.     head->prev = NULL;
  214.     head->data = 10;
  215.     puts("1");
  216.     creatNode(head, 20);
  217.     puts("2");
  218.     creatNode(head, 30);
  219.     puts("3");
  220.     creatNode(head, 40);
  221.  
  222.     printf("%p\n", head);
  223.  
  224.     printListForward(head);
  225.  
  226.     printf("%p\n", head);
  227.  
  228.  
  229.     // char* strr = (char*) malloc (50 * sizeof(char));
  230.     // fgets(strr, 50, stdin);
  231.     // strr[strlen(strr) -1] = '\0';
  232.     // printf("%p\n", strr);
  233.     // qw(strr);
  234.     // printf("%p\n", strr);
  235.  
  236.  
  237.     printListBackward(head);
  238.  
  239.  
  240.     pushForward(head, 50);
  241.     printListForward(head);
  242.     printListBackward(head);
  243.  
  244.     pushBack(head, 5);
  245.     printListForward(head);
  246.     printListBackward(head);
  247.     puts("!");
  248.    
  249.     insertElemInd(head, 24, 2);
  250.     printListForward(head);
  251.     printListBackward(head);
  252.     puts("!");
  253.  
  254.     insertElem(head, 44, 40);
  255.     printListForward(head);
  256.     printListBackward(head);
  257.     puts("!");
  258.  
  259.     // printf("%p\n", head);
  260.     deleteElem(head, 5);
  261.     // printf("%p\n", head);
  262.     printListForward(head);
  263.     printListBackward(head);
  264.     puts("!");
  265.  
  266.     // printListBackward(head);
  267.     return 0;
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement