Danh Sách Sinh Viên Bằng Hàng Đợi - Queue

07:02
Danh Sách Sinh Viên Bằng Hàng Đợi - Queue
Danh sách sinh viên sử dụng hàng đợi - queue gồm đầ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 Queue {
	Node* Front;
	Node* Rear;
};

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(Queue &Q) {
	Q.Front = Q.Rear = NULL;
}

//2. Kiem tra rong
bool IsEmpty(Queue Q) {
	if (Q.Rear == NULL) return true;
	else return false;
}

//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(Queue Q) {
	int dem = 0;
	for (Node* M = Q.Front; M != NULL; M = M->Next) {
		dem++;
	}
	return dem;
}

void EnQueue(Queue &Q, SinhVien x) {
	Node* P = AddNode(P, x);
	if (IsEmpty(Q)) Q.Front = Q.Rear = P;
	else {
		Q.Rear->Next = P;
		Q.Rear = P;
	}
}

void DeQueue(Queue &Q) {
	Q.Front = Q.Front->Next;
}

void InPut(Queue &Q, int n) {
	SinhVien x;
	for (int i = 0; i < n; i++) {
		cout << "Sinh vien " << i + 1 << endl;
		NhapTT(x);
		EnQueue(Q, x);
		cout << "-------------------------------------" << endl;
	}
}

void OutPut(Queue Q) {
	for (Node* M = Q.Front; M != NULL; M = M->Next) {
		XuatTT(M->Data);
		cout << "---------------------------------------" << endl;
	}
}
void AddAny(Queue& Q, Queue& Q2, int k, SinhVien x) {
	InIt(Q2);
	SinhVien sv;
	int a = DemSoLuong(Q) - (k - 1);
	for (int i = 0; i < k - 1; i++) {
		sv = Q.Front->Data;
		DeQueue(Q);
		EnQueue(Q2, sv);
	}
	EnQueue(Q2, x);

	for (int i = 0; i < a; i++) {
		sv = Q.Front->Data;
		DeQueue(Q);
		EnQueue(Q2, sv);
	}
	Q = Q2;

}

void DeleteAny(Queue& Q, Queue& Q2, int k) {
	InIt(Q2);
	SinhVien sv;
	int a = (DemSoLuong(Q) - (k - 1)) - 1;
	for (int i = 0; i < k - 1; i++) {
		sv = Q.Front->Data;
		DeQueue(Q);
		EnQueue(Q2, sv);
	}
	DeQueue(Q);
	for (int i = 0; i < a; i++) {
		sv = Q.Front->Data;
		DeQueue(Q);
		EnQueue(Q2, sv);
	}
	Q = Q2;
}
int main() {
	SinhVien sv;
	Queue Q, Q2;
	InIt(Q);
	int n, chon;
	cout << "Nhap so luong: ";
	cin >> n;
	InPut(Q, 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;
		cin >> chon;
		switch (chon) {
		case 1:
		{

			NhapTT(sv);
			EnQueue(Q, sv);
			break;
		}
		case 2:
		{
			OutPut(Q);
			system("pause");
			break;
		}
		case 3:
		{
			DeQueue(Q);
			break;
		}
		case 4:
		{
			int k;
			cout << "vi tri them: ";
			cin >> k;
			if (k < 1 || k >DemSoLuong(Q)) cout << "vi tri khong hop le. ";
			else {
				NhapTT(sv);
				AddAny(Q, Q2, k, sv);

			}
			system("pause");
			break;
		}
		case 5:
		{
			int k;
			cout << "vi tri xoa: ";
			cin >> k;
			if (k < 1 || k >DemSoLuong(Q)) cout << "vi tri khong hop le. ";
			else {

				DeleteAny(Q, Q2, k);

			}
			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.