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.