Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define MAX 100
- #include <fstream>
- using namespace std;
- typedef struct CONMEO
- {
- int maso;
- char giongmeo[31];
- char kieulong[31];
- float cannang;
- };
- typedef struct node
- {
- CONMEO data;
- struct node *pNext;
- }NODE;
- typedef struct stack
- {
- NODE *pTop;//con tro dau qli stack
- }STACK;
- //1. khoi tao danh sach rong
- void Init(STACK &s)
- {
- s.pTop = NULL;
- }
- //2. kiem tra ds co rong ko
- bool IsEmpty(STACK s)
- {
- return s.pTop == NULL ? true : false;
- }
- int CountElementInStack(STACK s)
- {
- int count = 0;
- while (s.pTop != NULL)
- {
- count++;
- s.pTop = s.pTop->pNext;
- }
- return count;
- }
- //kiem tra ds co day ko
- bool IsFull(STACK s)
- {
- int count = CountElementInStack(s);
- return count == MAX ? true : false;
- }
- NODE *GetNode(CONMEO a)
- {
- NODE *p = new NODE;
- if (p == NULL)
- {
- cout << "\nNot enough memory to allocate";
- return NULL;
- }
- p->data = a;
- p->pNext = NULL;
- return p;
- }
- //3.them ptu vao dau
- void Push(STACK &s, NODE *p)
- {
- if (IsEmpty(s) == true)
- {
- s.pTop = p;
- return;
- }
- p->pNext = s.pTop;
- s.pTop = p;
- }
- //4. lay gtri ptu dau stack nhung ko xoa
- CONMEO Peek(STACK s)
- {
- if (IsEmpty(s) == true)
- {
- cout << "\nStack is empty";
- }
- return s.pTop->data;
- }
- //5. lay ptu dau ra khoi stack
- CONMEO Pop(STACK &s)
- {
- CONMEO res;
- if (IsEmpty(s) == true)
- {
- return res;
- }
- else
- {
- res = s.pTop->data;
- NODE *temp = s.pTop;
- s.pTop = s.pTop->pNext;
- temp->pNext = NULL;
- return res;
- }
- }
- void NhapTTMeo(CONMEO &m)
- {
- rewind(stdin);
- cout << "\nNhap ma so: ";
- cin >> m.maso;
- rewind(stdin);
- cout << "\nNhap giong meo: ";
- gets(m.giongmeo);
- rewind(stdin);
- cout << "\nNhap kieu long: ";
- cin >> m.kieulong;
- rewind(stdin);
- cout << "\nNhap can nang: ";
- cin >> m.cannang;
- }
- void XuatTTMeo(CONMEO m)
- {
- cout << "\nMa so: " << m.maso;
- cout << "\nGiong meo: " << m.giongmeo;
- cout << "\nKieu long: " << m.kieulong;
- cout << "\nCan nang: " << m.cannang;
- }
- //nhap du lieu vao stack
- void InPut(STACK &s, int &n)
- {
- for (int i = 0; i < n; i++)
- {
- CONMEO a;
- cout << "\nNhap con meo thu " << i << ": ";
- NhapTTMeo(a);
- NODE *p = GetNode(a);
- Push(s, p);
- }
- }
- // xuat
- void OutPut(STACK s)
- {
- NODE *temp = s.pTop;
- int k = 1;
- if (IsEmpty(s) == true)
- {
- cout << "\nStack is empty";
- }
- while (temp != NULL)
- {
- cout << "\nCon meo " << k << ": ";
- XuatTTMeo(temp->data);
- temp = temp->pNext;
- k++;
- cout << endl;
- }
- }
- //6. sap xep selection sort
- void HoanVi(CONMEO &a, CONMEO &b)
- {
- CONMEO temp = a;
- a = b;
- b = temp;
- }
- void SelectionSort(STACK s)
- {
- for (NODE *i = s.pTop; i != NULL; i = i->pNext)
- {
- for (NODE *j = i->pNext; j != NULL; j = j->pNext)
- {
- if (i->data.cannang > j->data.cannang)
- {
- HoanVi(i->data, j->data);
- }
- }
- }
- }
- //lam rong stack
- void EmptyStack(STACK &s)
- {
- NODE *p = s.pTop;
- while (p != NULL)
- {
- delete(p);
- }
- }
- //8. doc nhi phan
- void XuatDanhSachMeoRaNhiPhan(STACK s)
- {
- fstream file;
- file.open("output.bin", ios::out | ios::trunc);
- for (NODE *i = s.pTop; i != NULL; i=i->pNext)
- {
- file << i->data.maso << " ";
- file << i->data.giongmeo << " ";
- file << i->data.kieulong << " ";
- file << i->data.cannang << " ";
- file << endl;
- }
- file.close();
- }
- void Menu(STACK s)
- {
- int luachon, n;
- CONMEO kq, kq1, result;
- int kq2;
- NODE *N = NULL;
- do
- {
- system("cls");
- cout << "\n\t|========MENU================|";
- cout << "\n\t|1.Them phan tu vao stack |";
- cout << "\n\t|2.Xuat stack |";
- cout << "\n\t|3.Xuat phan tu dau stack |";
- cout << "\n\t|4.Lay ptu dau stack va xoa |";
- cout << "\n\t|5.Kiem tra stack rong |";
- cout << "\n\t|6.Sap Xep |";
- cout << "\n\t|7.Xuat ra file binary |";
- cout << "\n\t|8.Thoat |";
- cout << "\n\t|========END=================|";
- cout << "\nNhap lua chon: ";
- cin >> luachon;
- switch (luachon)
- {
- case 1:
- cout << "\nNhap con meo muon them vao stack: ";
- cin >> n;
- InPut(s, n);
- break;
- case 2:
- cout << "\nList: ";
- OutPut(s);
- break;
- case 3:
- kq1 = Peek(s);
- cout << "\nCon meo dau stack la: " ;
- XuatTTMeo(kq1);
- break;
- case 4:
- result = Pop(s);
- cout << "\nCon meo dau la: ";
- XuatTTMeo(result);
- break;
- case 5:
- kq2 = IsEmpty(s);
- if (kq2)
- {
- cout << "\nStack is empty";
- }
- else
- {
- cout << "\nStack not is empty";
- }
- break;
- case 6:
- SelectionSort(s);
- OutPut(s);
- break;
- case 7:
- XuatDanhSachMeoRaNhiPhan(s);
- break;
- case 8:
- break;
- default:
- cout << "\nThank you ";
- break;
- }
- system("pause");
- } while (luachon != 7);
- }
- void main()
- {
- STACK s;
- Init(s);
- Menu(s);
- EmptyStack(s);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement