数据结构 实验五(银行叫号系统)

运用队列实现银行叫号系统。
银行叫号系统源代码

#include<iostream>
using namespace std;

struct Customers {
	int m_id=1;
};

class Bank {
public:
	Bank(int queueCapacity);//创建队列
	bool QueueEmpty();//判空队列
	bool QueueFull();//判满函数
	int QueueLength();//队列长度
	bool EnQueue(Customers customer);//新元素入队
	bool DeQueue(Customers& customer);//首元素出队
	void QueueTraverse();//遍历队列
	Customers* m_pQueue;//队列数组指针
	int m_QueueLength;//队列元素个数
	int m_QueueCapacity;//队列数组容量
	int m_Head;//队头
	int m_Tail;//队尾
};

Bank::Bank(int queueCapacity) {
	m_QueueCapacity = queueCapacity;
	m_Head = 0;
	m_Tail = 0;
	m_QueueLength = 0;
	m_pQueue = new Customers[m_QueueCapacity];
}

bool Bank::QueueEmpty() {
	return m_QueueLength == 0 ? true : false;
}

bool Bank::QueueFull() {
	return m_QueueLength == m_QueueCapacity ? true : false;
}

int Bank::QueueLength() {
	return m_QueueLength;
}

bool Bank::EnQueue(Customers customer) {
	if (QueueFull())
		return false;
	else {
		m_pQueue[m_Tail] = customer;
		m_Tail++;
		m_Tail = m_Tail % m_QueueCapacity;
		m_QueueLength++;
		return true;
	}
}

bool Bank::DeQueue(Customers& customer) {
	if (QueueEmpty())
		return false;
	else {
		customer = m_pQueue[m_Head];
		m_Head++;
		m_Head = m_Head % m_QueueCapacity;
		m_QueueLength--;
		return true;
	}
}

void Bank::QueueTraverse() {
	for (int i = m_Head; i < m_QueueLength; i++) {
		cout << m_pQueue[i % m_QueueCapacity].m_id << endl;
	}
}

int main() {
	Bank bank(10);
	Customers customer;
	int count = 1;
	cout << "欢迎使用银行叫号系统" << endl;
	cout << "1.有新客户到达,取号" << endl;
	cout << "2.有窗口空闲,叫号" << endl;
	cout << "3.退出系统" << endl;
	int number;
	while (true) {
		cin >> number;
		if (number == 1) {
			if (bank.EnQueue(customer)) {
				cout << "您的id是" << count << ",前面还有" << bank.QueueLength() - 1 << "人在排队!" << endl;
				count++;
			}
			else {
				cout << "取号失败!" << endl;
			}
		}
		if (number == 2) {
			if (bank.DeQueue(customer)) {
				count--;
				cout << "请第" << bank.m_Head << "号客户到窗口办理!" << endl;
			}
			else {
				cout << "队列中已没有客户!" << endl;
			}
		}
		if (number == 3)
			exit(0);
	}
	return 0;
}
  • 3
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
银行叫号系统可以使用两种数据结构来实现:有序链表和队列。 1. 有序链表:有序链表是一种按照特定顺序排列元素的链表。在银行叫号系统中,可以使用有序链表来按照客户到达时间的顺序来排列客户。每当有新的客户到达时,将其插入到有序链表的适当位置。当某个客户完成业务后,可以从链表中删除该客户。这样,银行工作人员可以按照链表中的顺序依次处理客户。 2. 队列:队列是一种先进先出(FIFO)的数据结构。在银行叫号系统中,可以使用队列来模拟客户排队的过程。每当有新的客户到达时,将其加入到队列的末尾。当某个客户完成业务后,从队列的头部取出下一个客户进行处理。这样,银行工作人员可以按照队列中的顺序依次处理客户。 以下是使用C语言实现银行叫号系统的示例代码: 1. 使用有序链表实现银行叫号系统: ```c #include <stdio.h> #include <stdlib.h> // 定义客户结构体 typedef struct { int arrivalTime; // 到达时间 int serviceTime; // 业务所需时间 } Customer; // 定义链表节点结构体 typedef struct Node { Customer customer; struct Node* next; } Node; // 插入客户到有序链表中 void insertCustomer(Node** head, Customer customer) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->customer = customer; newNode->next = NULL; if (*head == NULL || customer.arrivalTime < (*head)->customer.arrivalTime) { newNode->next = *head; *head = newNode; } else { Node* current = *head; while (current->next != NULL && current->next->customer.arrivalTime <= customer.arrivalTime) { current = current->next; } newNode->next = current->next; current->next = newNode; } } // 删除链表中的客户 void deleteCustomer(Node** head) { if (*head == NULL) { return; } Node* temp = *head; *head = (*head)->next; free(temp); } // 打印链表中的客户信息 void printCustomers(Node* head) { Node* current = head; while (current != NULL) { printf("Arrival Time: %d, Service Time: %d\n", current->customer.arrivalTime, current->customer.serviceTime); current = current->next; } } int main() { Node* head = NULL; // 添加客户到链表中 Customer customer1 = {10, 5}; insertCustomer(&head, customer1); Customer customer2 = {5, 3}; insertCustomer(&head, customer2); Customer customer3 = {8, 4}; insertCustomer(&head, customer3); // 打印链表中的客户信息 printCustomers(head); // 删除链表中的客户 deleteCustomer(&head); // 打印链表中的客户信息 printCustomers(head); return 0; } ``` 2. 使用队列实现银行叫号系统: ```c #include <stdio.h> #include <stdlib.h> // 定义客户结构体 typedef struct { int arrivalTime; // 到达时间 int serviceTime; // 业务所需时间 } Customer; // 定义队列结构体 typedef struct { Customer* customers; int front; int rear; int capacity; } Queue; // 创建队列 Queue* createQueue(int capacity) { Queue* queue = (Queue*)malloc(sizeof(Queue)); queue->customers = (Customer*)malloc(capacity * sizeof(Customer)); queue->front = 0; queue->rear = -1; queue->capacity = capacity; return queue; } // 判断队列是否为空 int isEmpty(Queue* queue) { return queue->rear < queue->front; } // 判断队列是否已满 int isFull(Queue* queue) { return queue->rear == queue->capacity - 1; } // 入队 void enqueue(Queue* queue, Customer customer) { if (isFull(queue)) { printf("Queue is full.\n"); return; } queue->customers[++queue->rear] = customer; } // 出队 void dequeue(Queue* queue) { if (isEmpty(queue)) { printf("Queue is empty.\n"); return; } queue->front++; } // 打印队列中的客户信息 void printCustomers(Queue* queue) { for (int i = queue->front; i <= queue->rear; i++) { printf("Arrival Time: %d, Service Time: %d\n", queue->customers[i].arrivalTime, queue->customers[i].serviceTime); } } int main() { Queue* queue = createQueue(5); // 入队 Customer customer1 = {10, 5}; enqueue(queue, customer1); Customer customer2 = {5, 3}; enqueue(queue, customer2); Customer customer3 = {8, 4}; enqueue(queue, customer3); // 打印队列中的客户信息 printCustomers(queue); // 出队 dequeue(queue); // 打印队列中的客户信息 printCustomers(queue); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值