Advertisement
thinhckhcmus

stack (bassic full )

May 29th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. #include <iostream>
  2. #define MAX 100
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. typedef struct CONMEO
  7. {
  8. int maso;
  9. char giongmeo[31];
  10. char kieulong[31];
  11. float cannang;
  12. };
  13. typedef struct node
  14. {
  15. CONMEO data;
  16. struct node *pNext;
  17. }NODE;
  18.  
  19. typedef struct stack
  20. {
  21. NODE *pTop;//con tro dau qli stack
  22. }STACK;
  23.  
  24. //1. khoi tao danh sach rong
  25. void Init(STACK &s)
  26. {
  27. s.pTop = NULL;
  28. }
  29.  
  30. //2. kiem tra ds co rong ko
  31. bool IsEmpty(STACK s)
  32. {
  33. return s.pTop == NULL ? true : false;
  34. }
  35.  
  36. int CountElementInStack(STACK s)
  37. {
  38. int count = 0;
  39. while (s.pTop != NULL)
  40. {
  41. count++;
  42. s.pTop = s.pTop->pNext;
  43. }
  44. return count;
  45. }
  46. //kiem tra ds co day ko
  47. bool IsFull(STACK s)
  48. {
  49. int count = CountElementInStack(s);
  50. return count == MAX ? true : false;
  51. }
  52.  
  53. NODE *GetNode(CONMEO a)
  54. {
  55. NODE *p = new NODE;
  56. if (p == NULL)
  57. {
  58. cout << "\nNot enough memory to allocate";
  59. return NULL;
  60. }
  61. p->data = a;
  62. p->pNext = NULL;
  63. return p;
  64. }
  65.  
  66. //3.them ptu vao dau
  67. void Push(STACK &s, NODE *p)
  68. {
  69. if (IsEmpty(s) == true)
  70. {
  71. s.pTop = p;
  72. return;
  73. }
  74. p->pNext = s.pTop;
  75. s.pTop = p;
  76. }
  77.  
  78. //4. lay gtri ptu dau stack nhung ko xoa
  79. CONMEO Peek(STACK s)
  80. {
  81. if (IsEmpty(s) == true)
  82. {
  83. cout << "\nStack is empty";
  84. }
  85. return s.pTop->data;
  86. }
  87.  
  88. //5. lay ptu dau ra khoi stack
  89. CONMEO Pop(STACK &s)
  90. {
  91. CONMEO res;
  92. if (IsEmpty(s) == true)
  93. {
  94. return res;
  95. }
  96. else
  97. {
  98. res = s.pTop->data;
  99. NODE *temp = s.pTop;
  100. s.pTop = s.pTop->pNext;
  101. temp->pNext = NULL;
  102. return res;
  103. }
  104. }
  105. void NhapTTMeo(CONMEO &m)
  106. {
  107. rewind(stdin);
  108. cout << "\nNhap ma so: ";
  109. cin >> m.maso;
  110.  
  111. rewind(stdin);
  112. cout << "\nNhap giong meo: ";
  113. gets(m.giongmeo);
  114.  
  115. rewind(stdin);
  116. cout << "\nNhap kieu long: ";
  117. cin >> m.kieulong;
  118.  
  119. rewind(stdin);
  120. cout << "\nNhap can nang: ";
  121. cin >> m.cannang;
  122.  
  123. }
  124. void XuatTTMeo(CONMEO m)
  125. {
  126. cout << "\nMa so: " << m.maso;
  127. cout << "\nGiong meo: " << m.giongmeo;
  128. cout << "\nKieu long: " << m.kieulong;
  129. cout << "\nCan nang: " << m.cannang;
  130. }
  131. //nhap du lieu vao stack
  132. void InPut(STACK &s, int &n)
  133. {
  134. for (int i = 0; i < n; i++)
  135. {
  136. CONMEO a;
  137. cout << "\nNhap con meo thu " << i << ": ";
  138. NhapTTMeo(a);
  139. NODE *p = GetNode(a);
  140. Push(s, p);
  141. }
  142. }
  143.  
  144. // xuat
  145. void OutPut(STACK s)
  146. {
  147. NODE *temp = s.pTop;
  148. int k = 1;
  149. if (IsEmpty(s) == true)
  150. {
  151. cout << "\nStack is empty";
  152. }
  153. while (temp != NULL)
  154. {
  155. cout << "\nCon meo " << k << ": ";
  156. XuatTTMeo(temp->data);
  157. temp = temp->pNext;
  158. k++;
  159. cout << endl;
  160. }
  161.  
  162. }
  163. //6. sap xep selection sort
  164. void HoanVi(CONMEO &a, CONMEO &b)
  165. {
  166. CONMEO temp = a;
  167. a = b;
  168. b = temp;
  169. }
  170. void SelectionSort(STACK s)
  171. {
  172. for (NODE *i = s.pTop; i != NULL; i = i->pNext)
  173. {
  174. for (NODE *j = i->pNext; j != NULL; j = j->pNext)
  175. {
  176. if (i->data.cannang > j->data.cannang)
  177. {
  178. HoanVi(i->data, j->data);
  179. }
  180. }
  181. }
  182. }
  183.  
  184. //lam rong stack
  185. void EmptyStack(STACK &s)
  186. {
  187. NODE *p = s.pTop;
  188. while (p != NULL)
  189. {
  190. delete(p);
  191. }
  192. }
  193. //8. doc nhi phan
  194. void XuatDanhSachMeoRaNhiPhan(STACK s)
  195. {
  196. fstream file;
  197. file.open("output.bin", ios::out | ios::trunc);
  198. for (NODE *i = s.pTop; i != NULL; i=i->pNext)
  199. {
  200. file << i->data.maso << " ";
  201. file << i->data.giongmeo << " ";
  202. file << i->data.kieulong << " ";
  203. file << i->data.cannang << " ";
  204. file << endl;
  205. }
  206.  
  207. file.close();
  208. }
  209. void Menu(STACK s)
  210. {
  211. int luachon, n;
  212. CONMEO kq, kq1, result;
  213. int kq2;
  214. NODE *N = NULL;
  215. do
  216. {
  217. system("cls");
  218. cout << "\n\t|========MENU================|";
  219. cout << "\n\t|1.Them phan tu vao stack |";
  220. cout << "\n\t|2.Xuat stack |";
  221. cout << "\n\t|3.Xuat phan tu dau stack |";
  222. cout << "\n\t|4.Lay ptu dau stack va xoa |";
  223. cout << "\n\t|5.Kiem tra stack rong |";
  224. cout << "\n\t|6.Sap Xep |";
  225. cout << "\n\t|7.Xuat ra file binary |";
  226. cout << "\n\t|8.Thoat |";
  227. cout << "\n\t|========END=================|";
  228. cout << "\nNhap lua chon: ";
  229. cin >> luachon;
  230. switch (luachon)
  231. {
  232. case 1:
  233. cout << "\nNhap con meo muon them vao stack: ";
  234. cin >> n;
  235. InPut(s, n);
  236. break;
  237. case 2:
  238. cout << "\nList: ";
  239. OutPut(s);
  240. break;
  241. case 3:
  242. kq1 = Peek(s);
  243. cout << "\nCon meo dau stack la: " ;
  244. XuatTTMeo(kq1);
  245. break;
  246. case 4:
  247. result = Pop(s);
  248. cout << "\nCon meo dau la: ";
  249. XuatTTMeo(result);
  250. break;
  251. case 5:
  252. kq2 = IsEmpty(s);
  253. if (kq2)
  254. {
  255. cout << "\nStack is empty";
  256. }
  257. else
  258. {
  259. cout << "\nStack not is empty";
  260. }
  261. break;
  262. case 6:
  263. SelectionSort(s);
  264. OutPut(s);
  265. break;
  266. case 7:
  267. XuatDanhSachMeoRaNhiPhan(s);
  268. break;
  269. case 8:
  270. break;
  271. default:
  272. cout << "\nThank you ";
  273. break;
  274. }
  275. system("pause");
  276. } while (luachon != 7);
  277. }
  278. void main()
  279. {
  280. STACK s;
  281. Init(s);
  282. Menu(s);
  283. EmptyStack(s);
  284. system("pause");
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement