队的入队,出队,遍历
#include <iostream>
using namespace std;
//定义结点
typedef struct QNode
{
int data;
QNode* next;
}QNode, * QueuePtr;
//定义链队
struct LQueue
{
QNode* front; //队头结点
QNode* rear; //队尾节点;
};
//初始化队列
void Init(LQueue& Q)
{
Q.front = Q.rear = new QNode;
Q.front->next = NULL;
}
//入队列
void enQueue(LQueue& Q)
{
int n;
cout << "请输入需要添加的元素个数:" << endl;
cin >> n;
cout << "请输入需要添加的元素:" << endl;
for (int i = 0; i < n; i++)
{
QueuePtr p = new QNode;
cin >> p->data;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
}
//判断队列是否为空
bool isEmpty(LQueue Q)
{
if (Q.front->next == NULL)
return true;
return false;
}
//出队列
void deQueue(LQueue& Q)
{
int n;
cout << "请输入需要删除的数字个数:" << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
if (isEmpty(Q))
{
cout << "队列为空" << endl;
return;
}
QueuePtr p = new QNode;
p = Q.front->next;
cout << "已删除元素:" << p->data << endl;
Q.front->next = p->next;
delete(p);
}
}
//遍历队列
void TraverseQueue(LQueue Q)
{
QueuePtr p = Q.front->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
return;
}
void clearQueue(LQueue& Q)
{
QueuePtr p, q;
p = Q.front->next;
Q.front->next = NULL;
while (p)
{
q = p->next;
delete(p);
p = q;
}
Q.rear = Q.front;
return;
}
//销毁队列
void destroyQueue(LQueue& Q)
{
while (Q.front)
{
Q.rear = Q.front->next;
delete(Q.front);
Q.front = Q.rear;
}
}
//菜单
void menu()
{
cout << "********1.入队 2.出队*****************" << endl;
cout << "********3.遍历队列 4.清空、销毁、退出*****" << endl;
}
int main()
{
LQueue queue;
int choice;
Init(queue);
while (1)
{
menu();
cin >> choice;
if (choice == 5) break;
switch (choice)
{case 1:
enQueue(queue); break;
case 2:
deQueue(queue); break;
case 3:
TraverseQueue(queue); break;
case 4:
clearQueue(queue);
destroyQueue(queue);
exit(0);break;
default: break;}
}
return 0;
}