SHARE
TWEET

Untitled

a guest Oct 14th, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <malloc.h>
  4.  
  5. /*
  6. struct Node
  7. */
  8. struct node{
  9.     int Data;
  10.     node *Next;
  11. };
  12.  
  13. /*
  14. struct List
  15. */
  16. struct List{
  17.     node *Head; // node dau
  18.     node *Tail; // node cuoi
  19. };
  20.  
  21. /*
  22.  Khoi tao List
  23. */
  24. void Init(List *L)
  25. {
  26.     L->Head = L->Tail = NULL;
  27. }
  28.  
  29. /*
  30.  Tao Node
  31.  
  32.  return Node
  33. */
  34. node *CreateNode(int x)
  35. {
  36.     node* p = (node*)malloc(sizeof(node)); // cap phat bo nho
  37.     if(p == NULL) // kiem tra neu bo nho day
  38.     {
  39.         return NULL; // return NULL
  40.     }
  41.     p->Next = NULL;
  42.     p->Data = x;
  43.     return p;
  44. }
  45. /*
  46.     return true neu danh sach rong
  47. */
  48. bool isEmpty(List L)
  49. {
  50.     return (L.Head == NULL);
  51. }
  52. /*
  53.     them vao dau
  54. */
  55. void AddHead(List *L, int value)
  56. {
  57.     node *p = CreateNode(value);
  58.     if(isEmpty(*L))
  59.     {
  60.         L->Head = L->Tail = p;
  61.     }
  62.     else
  63.     {
  64.         p->Next = L->Head;
  65.         L->Head = p;
  66.     }
  67. }
  68.  
  69. /*
  70.  them vao duoi
  71. */
  72. void AddTail(List *L, int value)
  73. {
  74.     node *p = CreateNode(value);
  75.     if(isEmpty(*L))
  76.     {
  77.         L->Head = L->Tail = p;
  78.     }
  79.     else
  80.     {
  81.         L->Tail->Next = p;
  82.         L->Tail = p;
  83.     }
  84. }
  85.  
  86. /*
  87.     Addat(&L, 3, 1);
  88.     them vao vi tri bat ki
  89. */
  90. void Addat(List *L, int position, int value)
  91. {
  92.     int count = 0;
  93.     if(position == 0)
  94.     {
  95.         AddHead(L, value);
  96.     }
  97.     else
  98.     {
  99.         node *p = L->Head;
  100.         while( p != NULL )
  101.         {
  102.             if(position == count)
  103.             {
  104.                 node *temp = CreateNode(value);
  105.                 temp->Next = p->Next;
  106.                 p->Next = temp;
  107.                 break;
  108.             }
  109.             count++;
  110.             p = p->Next;
  111.         }
  112.     }
  113. }
  114. void Input(List *L, int n)
  115. {
  116.     for(int i = 0; i < n; i++)
  117.     {
  118.         int x;
  119.         printf("Nhap so phan tu thu [%d] = ", i);
  120.         scanf("%d", &x);
  121.         AddTail(L, x);
  122.     }
  123. }
  124.  
  125. void Print(List L)
  126. {
  127.     for(node *p = L.Head; p != NULL; p = p->Next)
  128.     {
  129.         printf("%d->", p->Data);
  130.     }
  131. }
  132.  
  133. int Lenght(List L)
  134. {
  135.     int Count = 0;
  136.     for(node *p = L.Head; p!= NULL; p = p->Next)
  137.     {
  138.         Count++;   
  139.     }
  140.     return Count;
  141. }
  142.  
  143.  
  144. node *GetNode(List L, int x)
  145. {
  146.     node *p = L.Head;
  147.    
  148.     while(p!=NULL)
  149.     {
  150.         if(p->Data == x)
  151.         {
  152.             return p;
  153.         }
  154.         else
  155.         {
  156.             p=p->Next;
  157.         }
  158.     }
  159.     return p;
  160. }
  161.  
  162. void DeleteFisrtData(List *L)
  163. {
  164.     node *p = L->Head;
  165.     L->Head = L->Head->Next;
  166.     free(p);
  167. }
  168.  
  169. void DeleteLastData(List *L)
  170. {
  171.     node *p;
  172.     node *k = L->Head;
  173.     while(k != NULL)
  174.     {
  175.         if(k == L->Tail)
  176.         {
  177.             L->Tail = p;
  178.             L->Tail->Next = NULL;
  179.             free(k);
  180.             break;
  181.         }
  182.         p = k;
  183.         k=k->Next;
  184.     }
  185. }
  186.  
  187. void Delete(List *L, int value)
  188. {
  189.     if(L->Head->Data == value)
  190.     {
  191.         DeleteFisrtData(L);
  192.     }
  193.     if(L->Tail->Data == value)
  194.     {
  195.         DeleteLastData(L);
  196.     }
  197.     node *k = L->Head->Next;
  198.     node *p;
  199.     while( k!= NULL)
  200.     {
  201.         if(k->Data == value)
  202.         {
  203.             p->Next = k->Next;
  204.             free(k);
  205.             return;
  206.         }
  207.         p = k;
  208.         k = k->Next;
  209.     }  
  210.    
  211. }
  212.  
  213. void Swap(node *p, node *q)
  214. {
  215.     int temp;
  216.     temp = p->Data;
  217.     p->Data = q->Data;
  218.     q->Data = temp;
  219. }
  220.  
  221. void Sort(List *L)
  222. {
  223.     node *p = L->Head;
  224.     while( p != NULL)
  225.     {
  226.         node *k = p->Next;
  227.         while(k != NULL)
  228.         {
  229.             if(p->Data < k->Data)
  230.             {
  231.                 Swap(p, k);
  232.             }
  233.             k = k->Next;
  234.         }
  235.         p = p->Next;
  236.     }
  237. }
  238.  
  239. void Menu()
  240. {
  241.     printf("\n1: Add head");
  242.     printf("\n2: Add hail");
  243.     printf("\n3: Add at posiotion");
  244.     printf("\nYour choice: ");
  245. }
  246.  
  247. int main()
  248. {
  249.     List L;
  250.     int n, value, position;
  251.     Init(&L);
  252.     AddTail(&L, 1);
  253.     AddTail(&L, 2);
  254.     AddTail(&L, 5);
  255.     AddTail(&L, 3);
  256.     Print(L);
  257.     printf("\n");
  258.     printf("Nhap gia tri muon them: "); scanf("%d", &n);
  259.     printf("Nhap vi tri muon them:  "); scanf("%d", &position);
  260.  
  261.     Addat(&L, position, n);
  262.     printf("\nsau khi them\n");
  263.  
  264.     Print(L);
  265.     system("pause");
  266.     return 0;
  267. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top