Danh sách sinh viên sử dụng ngăn xếp Stack đầy đủ các chức năng cơ bản
Lưu ý: Thêm < > vào chỗ khai báo thư viện
// Nguyen Cong Cuong - KTPM K14B #include iostream #include stdio.h #include stdlib.h using namespace std; typedef struct SinhVien { char MaSV[30]; char HoTen[30]; int NamSinh; char Lop[30]; float DTB; }; typedef struct Node { SinhVien Data; Node* Next; }; typedef struct Node* Stack; void NhapTT(SinhVien &sv) { fflush(stdin); cout << "Ma SV: "; cin.getline(sv.MaSV, 30); cout << "Ho ten: "; cin.getline(sv.HoTen, 30); cout << "Nam sinh: "; cin >> sv.NamSinh; fflush(stdin); cout << "Lop: "; cin.getline(sv.Lop, 30); cout << "DTB: "; cin >> sv.DTB; } void XuatTT(SinhVien sv) { cout << "Ma SV: " << sv.MaSV << endl; cout << "Ho ten:" << sv.HoTen << endl; cout << "Nam sinh: " << sv.NamSinh << endl; cout << "Lop: " << sv.Lop << endl; cout << "DTB: " << sv.DTB << endl; } //1. Khoi tao void InIt(Stack &S) { S == NULL; } //2. Kiem tra rong bool IsEmpty(Stack S) { return (S == NULL); } //3. Tao Node Node*AddNode(Node* P, SinhVien x) { P = (Node*)malloc(sizeof(Node)); P->Data = x; P->Next = NULL; return P; } //4.Dem so luong int DemSoLuong(Stack S) { int dem = 0; for (Node* M = S; M != NULL; M = M->Next) { dem++; } return dem; } void Pop(Stack& S, SinhVien x) { Node* P = AddNode(P, x); P->Next = S; S = P; } void Push(Stack& S) { S = S->Next; } void InPut(Stack& S, int n) { InIt(S); SinhVien x; for (int i = 0; i < n; i++) { cout << "Sinh vien " << i + 1 << endl; NhapTT(x); Pop(S, x); } } void OutPut(Stack S) { for (Node* M = S; M != NULL; M = M->Next) { XuatTT(M->Data); cout << "------------------------------------" << endl; } } void AddAny(Stack& S, Stack &S2, int k, SinhVien x) { InIt(S2); SinhVien sv; for (int i = 0; i < k - 1; i++) { sv = S->Data; Push(S); Pop(S2, sv); } Pop(S, x); for (int i = 0; i < k - 1; i++) { sv = S2->Data; Push(S2); Pop(S, sv); } } void DeleteAny(Stack& S, Stack &S2, int k) { InIt(S2); SinhVien sv; for (int i = 0; i < k - 1; i++) { sv = S->Data; Push(S); Pop(S2, sv); } Push(S); for (int i = 0; i < k - 1; i++) { sv = S2->Data; Push(S2); Pop(S, sv); } } void Tach(Stack& S, Stack& S2, Stack& S3) { InIt(S3); InIt(S2); int temp = 0; SinhVien sv; for (Node*M = S; M != NULL; M = M->Next) { temp++; if ((M->Data).DTB > 5.0) { for (int i = 0; i < temp - 1; i++) { sv = S->Data; Push(S); Pop(S2, sv); } sv = S->Data; Push(S); Pop(S3, sv); for (int i = 0; i < temp - 1; i++) { sv = S2->Data; Push(S2); Pop(S, sv); } temp--; } } } int main() { SinhVien x; int chon; Stack S, S2, S3; int n; cout << "So luong sinh vien: "; cin >> n; InPut(S, n); do { system("cls"); cout << "1. Them sinh vien. " << endl; cout << "2. Xuat sinh vien." << endl; cout << "3. Xoa sinh vien. " << endl; cout << "4. Them bat ky. " << endl; cout << "5. Xoa bat ky. " << endl; cout << "6. Tach diem trung binh. " << endl; cin >> chon; switch (chon) { case 1: { NhapTT(x); Pop(S, x); break; } case 2: { OutPut(S); system("pause"); break; } case 3: { Push(S); break; } case 4: { int k; cout << "Them vao vi tri: "; cin >> k; if (k < 1 || k > DemSoLuong(S)) cout << "Vi tri khong hop le."; else { SinhVien x; NhapTT(x); AddAny(S, S2, k, x); } system("pause"); break; } case 5: { int k; cout << "xoa vi tri: "; cin >> k; if (k < 1 || k > DemSoLuong(S)) cout << "Vi tri khong hop le."; else { DeleteAny(S, S2, k); } system("pause"); break; } case 6: { Tach(S, S2, S3); cout << "stack 1" << endl; OutPut(S); cout << "stack 2 " << endl; OutPut(S3); system("pause"); break; } } } while (chon != 0); return 0; }
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.