Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.81 KB | None | 0 0
  1. // ConsoleApplication8.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <stdlib.h>
  6. struct Node
  7. {
  8.     int Value;
  9.     Node * Next;
  10.     Node * Prev;
  11. };
  12. typedef struct Node Node;
  13. Node * Create(int value)
  14. {
  15.     Node * t = (Node *)malloc(sizeof(Node));
  16.     t->Value = value;
  17.     t->Next = t;
  18.     t->Prev = t;
  19.     return(t);
  20. }
  21. Node * GetTail(Node * root)
  22. {
  23.     Node * tmp = root;
  24.     while(tmp->Next != root)
  25.     {
  26.         tmp = tmp->Next;
  27.     }
  28.     return(tmp);
  29. }
  30. void Add(Node * root, int value)
  31. {
  32.     Node * t = (Node *)malloc(sizeof(Node));
  33.     t->Value = value;
  34.     Node * tmp = GetTail(root);
  35.     tmp->Next = t;
  36.     t->Next = root;
  37.     t->Prev = tmp;
  38.     Node * r = root;
  39.     root->Prev = t;
  40. }
  41. Node * Find(Node * root, int value)
  42. {
  43.     Node * t = root;
  44.     while(t->Next != root)
  45.     {
  46.         if(t->Value == value)
  47.         {
  48.             return(t);
  49.         }
  50.         t = t->Next;
  51.     }
  52.     if(t->Value == value)
  53.         return(t);
  54.     return(NULL);
  55. }
  56. void Free(Node * t)
  57. {
  58.     free(t);
  59. }
  60. Node * Remove(Node * root, int value)
  61. {
  62.     Node * tmp = GetTail(root);
  63.     Node * t = Find(root, value);
  64.     Node * prev = t->Prev;
  65.     Node * next = t->Next;
  66.     if(t == tmp)
  67.     {  
  68.         prev->Next = root;
  69.         root->Prev = prev;
  70.     }
  71.     else if(t == root)
  72.     {
  73.         root = next;
  74.         tmp->Next = root;
  75.         root->Prev = tmp;
  76.     }
  77.     else
  78.     {
  79.         prev->Next = t->Next;
  80.         next->Prev = t->Prev;
  81.     }
  82.     Free(t);
  83.     return(root);
  84. }
  85. void List(Node * root)
  86. {
  87.     Node * t = root;
  88.     while(t->Next != root)
  89.     {
  90.         printf("%d ", t->Value);
  91.         t = t->Next;
  92.     }
  93.     printf("%d\r\n", t->Value);
  94. }
  95. int _tmain(int argc, _TCHAR* argv[])
  96. {
  97.     Node * root;
  98.     root = Create(1);
  99.     Add(root, 2);
  100.     Add(root, 3);
  101.     Add(root, 4);
  102.     Add(root, 5);
  103.     List(root);
  104.     Node * find = Find(root, 3);
  105.     printf("%d\r\n", find);
  106.     root = Remove(root, 3);
  107.     root = Remove(root, 1);
  108.     root = Remove(root, 5);
  109.     List(root);
  110.     Free(root);
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement