Advertisement
huutho_96

dslk

Mar 11th, 2015
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //cấu trúc NODE
  5. struct NODE
  6. {
  7. int x;
  8. NODE *pNEXT;
  9. };
  10. //cấu trúc LiST
  11. struct LIST
  12. {
  13. NODE *pHead, *pTail;
  14. };
  15. //Khởi tạo LIST
  16. void CreatEmptyList(LIST &list)
  17. {
  18. list.pHead = list.pTail = NULL;
  19. }
  20. //Kiểm tra LIST vừa khởi tạo
  21. bool IsEmptyList(LIST list)
  22. {
  23. return(list.pHead == NULL && list.pTail == NULL);
  24. }
  25. //Thêm 1 node vào đầu danh sách
  26. void AddHead(LIST &list, NODE *pNew)
  27. {
  28. pNew->pNEXT = list.pHead;
  29. list.pHead = pNew;
  30. }
  31. //Tạo 1 node với dữ liệu đưa vào kiểu số nguyên, giá trị x, hàm trả về con trỏ kiểu NODE
  32. NODE *CreatNode(int x)
  33. {
  34. NODE *p;
  35. p = new NODE;
  36. if (p == NULL)
  37. exit(0);
  38. p->x = x;
  39. p->pNEXT = NULL;
  40. return p;
  41. }
  42. //Hàm nhập
  43. void Input(LIST &list)
  44. {
  45. NODE *pNew;
  46. int x;
  47. CreatEmptyList(list);
  48. do
  49. {
  50. cout << "nhap gia tri nguyen (0 de ket thuc): ";
  51. cin >> x;
  52. if (x == 0) break;
  53. pNew = CreatNode(x);
  54. AddHead(list, pNew);
  55. } while (1);
  56. }
  57. //Hàm xuất
  58. void Output(LIST list)
  59. {
  60. int x;
  61. NODE *pNew;
  62. pNew = list.pHead;
  63. while (pNew != NULL)
  64. {
  65. x = pNew->x;
  66. cout << x << endl;
  67. pNew = pNew->pNEXT;
  68. }
  69. }
  70. //Hàm tìm số chẵn dương trong danh sách liên kết. đưa vào 1 danh sách liên kết đơn, và 1 biến để đếm số số chẵn
  71. //trong danh sách liên kết. hàm trả về trung bình cộng của các số chẵn trong dãy
  72. float Timchanduong(LIST list, int &dem)
  73. {
  74. //Khởi tạo các biến để lưu giá trị
  75. int x, tong = 0;
  76. float tb;
  77.  
  78. //Tạo con trỏ kiểu Node và trỏ vào đầu danh sách
  79. NODE *pNEW;
  80. pNEW = list.pHead;
  81.  
  82. //Vòng lặp duyệt từ đầu đến cuối danh sách
  83. while (pNEW != NULL)
  84. {
  85. //x lưu giá trị của phần tử trong danh sách liên kết
  86. x = pNEW->x;
  87. //kiểm tra chẵn dương, đúng thì cộng dòn vào biến tổng, và tăng biến đếm
  88. if(x % 2 == 0 && x>0)
  89. {
  90. tong += x;
  91. dem++;
  92. }
  93. //pNew trỏ đến phần tử tiếp theo của danh sách
  94. pNEW = pNEW->pNEXT;
  95. }
  96. //trả về trung bình cộng của các sỗ chẵn dương trong danh sách liên kết
  97. return float(tong) / dem;
  98. }
  99. int main()
  100. {
  101. LIST list;
  102. int dem = 0;
  103. float tbc;
  104. Input(list);
  105. tbc = Timchanduong(list, dem);
  106. cout << "co " << dem << " so chan duong\ntrungbinh: " << tbc << endl;
  107. Output(list);
  108. return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement