Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement