1.学生在线答疑排队系统
编程模拟实现以下功能:
答疑现场教师每次只针对一个学生答疑,其他学生处于等待状态,队伍按照同学到达的先后排列。
#include<iostream>
using namespace std;
typedef int QElemType;
typedef struct QNode
{
string ID;
string name;
struct QNode* next;
} QNode, * QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} LinkQueue;
//销毁队列
void DestroyQueue(LinkQueue& Q)
{
while (Q.front)
{
Q.rear = Q.front->next;
delete Q.front;
Q.front = Q.rear;
}
}
//链队列初始化
void InitQueue(LinkQueue& Q)
{
Q.front = new QNode;
Q.rear = Q.front;
Q.front->next = NULL;
cout << "队列初始化成功" << endl;
}
//求链队列长度
int QueueLength(LinkQueue Q)
{
QNode* p1 = Q.front;
QNode* p2 = Q.rear;
int length = 0;
while (p1 != p2)
{
p1 = p1->next;
length++;
}
return length;
}
//求链队列队头元素
void GetHead(LinkQueue Q)
{
if (Q.front == Q.rear)
cout << "链队列为空" << endl;
else {
cout << "队头学生的学号为:" << Q.front->next->ID << endl;
cout << "队头学生的姓名为:" << Q.front->next->name << endl;
}
}
//入队
void EnQueue(LinkQueue& Q)
{
QNode* p = new QNode;
cout << "请输入学号:" << endl;
cin >> p->ID;
cout << "请输入姓名:" << endl;
cin >> p->name;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
cout << "入队成功" << endl;
}
//出队
void DeQueue(LinkQueue& Q)
{
if (Q.front == Q.rear)
cout << "没有同学正在排队" << endl;
else
{
string id, Name;
QNode* p = Q.front->next;
id = p->ID;
Name = p->name;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
delete p; //释放被删结点
cout << "请以下同学进入办公室答疑:" << endl;
cout <<"学号:"<< id<<"姓名:" << Name << endl;
}
}
//输出队列元素
void DisplayQueue(LinkQueue Q)
{
if (Q.front == Q.rear)
cout << "链队列为空" << endl;
else
{
QNode* p = Q.front->next;
cout << "队头->";
while (p)
{
cout << p->ID<<p->name << " ";
p = p->next;
}
cout << "->队尾" << endl;
}
}
void Queueshow_help()
{
cout << "\n******* 欢迎进入答疑系统 ******" << endl;
cout << "1----排队" << endl;
cout << "2----答疑" << endl;
cout << "3----查看答疑人数" << endl;
cout << "4----输出正在排队的学生" << endl;
cout << "0----退出" << endl;
}
int main(){
LinkQueue Q;
Queueshow_help();
InitQueue(Q);
while (1)
{
int operate;
cout << "输入要执行操作:";
cin >> operate;
if (operate == 1)
{
cout << "请输入入队元素:";
EnQueue(Q);
continue;
}
else if (operate == 2)
{
DeQueue(Q);
continue;
}
else if (operate == 3)
{
cout << "答疑队列中同学的数量为:" << QueueLength(Q) << endl;
continue;
}
else if (operate == 4)
{
DisplayQueue(Q);
continue;
}
else if (operate == 0)
{
break;
cout<<"已到下班时间" << endl;
}
else
{
cout << "\n操作码错误!!!" << endl;
Queueshow_help();
}
}
DestroyQueue(Q);
}