Advertisement
UniC

CODEDSLK

Oct 2nd, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5.  
  6. // KHAI BÁO NODE**********************
  7. struct Node
  8. {
  9. int Data;
  10. struct Node *pNext; // tí dổi thành next
  11. };
  12. typedef struct Node NODE; // tí đổi thành SNode;
  13.  
  14. struct List
  15. {
  16. NODE *pHead;
  17. NODE *pTail;
  18. };
  19. typedef struct List LIST; //tí đổi thành SList
  20.  
  21. // KHỞI TẠO********************************
  22. void Intic(LIST &l) // sử dụng trong InPut
  23. {
  24. l.pHead = l.pTail = NULL;
  25. }
  26.  
  27. // XUẤT NODE theo đề
  28. void XuatNode(NODE *p)
  29. {
  30. printf("%d ", p->Data);
  31. }
  32.  
  33. // TẠO NODE **********************
  34. NODE *CreateNode(int data)
  35. {
  36. // Kiểm tra bộ nhớ
  37. NODE *p = new NODE;
  38. if(p == NULL)
  39. {
  40. printf("\nMua them cay Ram nhe!Het bo nho roi!!!");
  41. getch();
  42. return NULL;
  43. }
  44.  
  45. p->Data = data;
  46. p->pNext = NULL;
  47.  
  48. return p; // trả về NODE p
  49. }
  50.  
  51. // THÊM ĐẦU / THÊM CUỐI****************
  52. void AddHead(LIST &l, NODE *p) // Thêm đầu
  53. {
  54. // Kiểm tra danh sách có rỗng hay không
  55. if(l.pHead == NULL)
  56. l.pHead = l.pTail = p;
  57. else
  58. {
  59. p->pNext = l.pHead;
  60. l.pHead = p;
  61. }
  62. }
  63.  
  64. void AddTail(LIST &l, NODE *p) // Thêm cuối
  65. {
  66. // Kiểm tra LIST có rỗng hay không
  67. if(l.pHead == NULL)
  68. l.pHead = l.pTail = p;
  69. else
  70. {
  71. l.pTail->pNext = p;
  72. l.pTail = p;
  73. }
  74. }
  75.  
  76. // Thêm NODE p vào sau q
  77. void ThemSau(LIST &l, NODE *q, NODE *p)
  78. {
  79. if(p == NULL || q == NULL)
  80. return;
  81.  
  82. for(NODE *k = l.pHead; k != NULL; k = k ->pNext)
  83. {
  84. if(k->Data == q->Data)
  85. {
  86. p->pNext = k->pNext;
  87. k->pNext = p;
  88. }
  89. }
  90.  
  91. if(l.pTail == q) // kiểm tra ngoại lệ
  92. l.pTail = p;
  93. }
  94.  
  95. // InPut / OutPut ********************
  96. void InPut(LIST &l, int n)
  97. {
  98. Intic(l);
  99. for(int i = 0; i < n; i++)
  100. {
  101. int x;
  102. printf("\nNhap vao NODE thu %d: ", i + 1);
  103. printf("\nNhap Data: ");
  104. scanf("%d", &x);
  105.  
  106. NODE *p = CreateNode(x);
  107. AddTail(l, p);
  108. }
  109. }
  110.  
  111.  
  112. // XUẤT LIST
  113. void OutPut(LIST l)
  114. {
  115. printf("\nDanh sach: ");
  116. for(NODE *p = l.pHead; p != NULL; p = p->pNext)
  117. {
  118. printf("%d ", p->Data);
  119. }
  120. }
  121.  
  122.  
  123. // XÓA ĐẦU
  124. void XoaDau(LIST &l)
  125. {
  126. if(l.pHead != NULL)
  127. {
  128. NODE *p = l.pHead;
  129. l.pHead = l.pHead->pNext;
  130. delete p;
  131. return;
  132. }
  133.  
  134. else
  135. printf("\nBan xoa cai gi khi danh sach cha co gi ca!!!");
  136. }
  137.  
  138. // XÓA CUỐI
  139. void XoaCuoi(LIST &l)
  140. {
  141. if(l.pTail == NULL)
  142. return;
  143.  
  144. NODE *q = new NODE;
  145. for(NODE *k = l.pHead; k != NULL; k = k->pNext)
  146. {
  147. if(k == l.pTail)
  148. {
  149. l.pTail = q;
  150. l.pTail->pNext = NULL;
  151. delete k;
  152. return;
  153.  
  154. }
  155. q = k;
  156. }
  157. }
  158.  
  159.  
  160. void XoaSauMotNODE(LIST &l, NODE *q)
  161. {
  162.  
  163. for(NODE *k = l.pHead; k != l.pTail; k = k->pNext)
  164. {
  165. if(q->Data == k->Data)
  166. {
  167. NODE *p = k->pNext;
  168. k->pNext = p->pNext;
  169.  
  170. if(l.pTail == p)
  171. l.pTail = q;
  172.  
  173. delete p;
  174. return;
  175. }
  176. }
  177. }
  178.  
  179. void Giaiphong(LIST &l)
  180. {
  181. NODE *q;
  182. while(l.pHead != NULL)
  183. {
  184. q = l.pHead;
  185. l.pHead = l.pHead->pNext;
  186. delete q;
  187. }
  188. }
  189.  
  190. void HoanVi(int &a, int &b)
  191. {
  192. int temp = a;
  193. a = b;
  194. b = temp;
  195. }
  196.  
  197. void InterchangeSort_LIST(LIST &l) // sau khi sắp xếp đã thay đổi lại giá trị của 2 NODE
  198. {
  199. for(NODE *p = l.pHead; p != l.pTail; p = p->pNext)
  200. {
  201. for(NODE *q = p->pNext; q != NULL; q = q->pNext)
  202. {
  203. if(p->Data > q->Data)
  204. {
  205. HoanVi(p->Data, q->Data);
  206. }
  207. }
  208. }
  209. }
  210.  
  211. void SelectionSort(LIST &l)
  212. {
  213. for(NODE *p = l.pHead; p != l.pTail; p = p->pNext)
  214. {
  215. NODE *min = p;
  216. for(NODE *q = p->pNext; q != NULL; q = q->pNext)
  217.  
  218. if(q->Data < min->Data)
  219. min = q;
  220.  
  221. if(min != p)
  222. HoanVi(p->Data, min->Data);
  223. }
  224. }
  225.  
  226. int TinhTongCacSoChan(LIST l)
  227. {
  228. int Tong = 0;
  229. for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  230. {
  231. if(q->Data % 2 == 0)
  232. Tong += q->Data;
  233. }
  234. return Tong;
  235. }
  236.  
  237. int DemSoLonHonX(LIST l, int x)
  238. {
  239. int dem = 0;
  240. for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  241. {
  242. if(q->Data > x)
  243. dem++;
  244. }
  245. return dem;
  246. }
  247.  
  248. int TimPhanTuNhoNhat(LIST l)
  249. {
  250. NODE *min = l.pHead;
  251. for(NODE *q = l.pHead->pNext; q != NULL; q = q->pNext)
  252. {
  253. if(q->Data < min->Data)
  254. min = q;
  255. }
  256. return min->Data;
  257. }
  258.  
  259. NODE *TimNODEX(LIST l, int x)
  260. {
  261. for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  262. {
  263. if(q->Data == x)
  264. return q;
  265. }
  266. }
  267.  
  268.  
  269. void XoaPhanTuLonHon4(LIST &l)
  270. {
  271.  
  272. if(l.pHead ->pNext == NULL) // trường hợp LIST có 1 phần tử
  273. if(l.pHead->Data > 4)
  274. {
  275. Giaiphong(l);
  276. return;
  277. }
  278. if(l.pHead != NULL)
  279. {
  280. NODE *q = l.pHead;
  281. for(NODE *k = l.pHead->pNext; k != l.pTail; k = k->pNext)
  282. {
  283. if(k->Data > 4)
  284. {
  285. NODE *g = k->pNext; //NODE sau
  286. q->pNext = g; // đặt lại liên kết
  287. delete k;
  288. k = q; // gán lại bằng NODE trước
  289. }
  290.  
  291. q = k; //NODE trước
  292. }
  293. }
  294. else
  295. return;
  296.  
  297. if(l.pHead->Data > 4)
  298. XoaDau(l);
  299.  
  300. if(l.pTail->Data > 4)
  301. XoaCuoi(l);
  302.  
  303. }
  304.  
  305.  
  306. int KTNT(int n)
  307. {
  308. if(n < 2)
  309. return 0;
  310.  
  311. if(n > 2)
  312. {
  313. if(n % 2 == 0)
  314. return 0;
  315. for(int i = 3; i <= sqrt((float)n); i += 2)
  316. {
  317. if(n % i == 0)
  318. return 0;
  319. }
  320. }
  321. return 1;
  322. }
  323.  
  324. int TinhTongSNT(LIST l)
  325. {
  326. int Tong = 0;
  327. for(NODE *q = l.pHead; q != NULL; q = q->pNext)
  328. {
  329. if(KTNT(q->Data))
  330. Tong += q->Data;
  331. }
  332. return Tong;
  333. }
  334.  
  335. int main()
  336. {
  337. int n;
  338. LIST l;
  339. printf("\nNhap vao so luong phan tu: ");
  340. scanf("%d", &n);
  341.  
  342. InPut(l, n);
  343. OutPut(l);
  344.  
  345. // THÊM SAU
  346. int a = 69,b = 4;
  347. NODE *p = CreateNode(a);
  348. NODE *q = CreateNode(b);
  349.  
  350. //ThemSau(l, q, p);
  351. //printf("\nSau khi them: ");
  352. //OutPut(l);
  353.  
  354. /*printf("\nSau khi xoa dau: ");
  355. XoaDau(l);
  356. OutPut(l);*/
  357.  
  358. //printf("\nSau khi xoa cuoi: ");
  359. //XoaCuoi(l);
  360. //OutPut(l);
  361.  
  362. /*
  363. int x;
  364. printf("\nNhap vao NODE truoc NODE can xoa: ");
  365. scanf("%d", &x);
  366. NODE *z = CreateNode(x);
  367. printf("\nSau khi xoa cuoi: ");
  368. XoaSauMotNODE(l, z);
  369. OutPut(l);
  370. */
  371.  
  372. //printf("\nDanh sach sau khi sap xep: ");
  373. ////InterchangeSort_LIST(l);
  374. //SelectionSort(l);
  375. //OutPut(l);
  376.  
  377. /*int Tong = TinhTongCacSoChan(l);
  378. printf("\nTong cac so chan trong LIST: %d", Tong);*/
  379.  
  380. // int so;
  381. // printf("\nNhap vao so can kiem tra: ");
  382. // scanf("%d", &so);
  383. //// int dem = DemSoLonHonX(l, so);
  384. // int dem = DemSoLonHonX(l, 10); // đề yêu cầu 10.
  385. //// printf("\nSo cac so lon hon %d: %d", so, dem);
  386. // printf("\nSo cac so lon hon 10: %d", dem);
  387.  
  388. /*int min = TimPhanTuNhoNhat(l);
  389. printf("\nPhan tu min: %d", min);*/
  390.  
  391. //int giatrix;
  392. //printf("\nNhap vao gia tri cua NODE can tim: ");
  393. //scanf("%d", &giatrix);
  394.  
  395. //NODE *NODEX = TimNODEX(l, giatrix);
  396. //printf("\nNODE vua tim: %d", NODEX->Data);
  397.  
  398. XoaPhanTuLonHon4(l);
  399. printf("\nDanh sach sau khi xoa phan tu lon hon 4: ");
  400. OutPut(l);
  401.  
  402. //int TongSNT = TinhTongSNT(l);
  403. //printf("\nTong cac SNT: %d", TongSNT);
  404.  
  405.  
  406.  
  407.  
  408.  
  409. Giaiphong(l);
  410. getch();
  411. return 0;
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement