Danh Sách Sinh Viên Bằng Ngăn Xếp - Stack

06:39
Danh Sách Sinh Viên Bằng Ngăn Xếp - Stack
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;
}

Share this :

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.