Basic operation of chain queue

Operation introduction:
1. Create a chain queue
2. Enqueue one element
3. Dequeue one element
4. Get the first element of the
queue 5. Clear the queue
6. Determine whether the queue is empty
7. Find the queue length
8. Output the current queue
9. Exit the operating system

#include<windows.h>
#include<iostream>
using namespace std;
typedef struct QNode     //结点结构
{
    
    
	int data;
	struct QNode *next;
}QNode, *QPtr;
typedef struct
{
    
    
	QPtr front;   //队首指针
	QPtr rear;    //队尾指针
}LinkQueue;
//函数声明
//创建一个链式队列
LinkQueue InitQueue()
{
    
    
	LinkQueue Q;
	Q.front = Q.rear = (QPtr)malloc(sizeof(QNode));
	if (Q.front == NULL)
	{
    
    
		cout << "error";   //存储分配失败
		exit(0);
	}
	int n, i;
	cout << "请输入你希望队列元素的个数:";
	cin >> n;
	if (n == 0)cout << endl;
	else 
	{
    
    
		cout << "请输入" << n << "个队列元素:";
		for (i = 0; i < n; i++)
		{
    
    
			QPtr p;
			p = (QPtr)malloc(sizeof(QNode));
			p->next = NULL;
			cin >> p->data;
			Q.rear->next = p;
			Q.rear = p;
		}
	}
	return Q;
}
//输出链式队列
void putQueue(LinkQueue Q)
{
    
    
	
	cout << "当前队列为:";
	if (Q.front == Q.rear)
	{
    
    
		cout << "队列为空"<<endl;
	}
	else
	{
    
    
		QPtr p;
		p = Q.front->next;
		while (p != NULL)
		{
    
    
			cout << p->data << " ";
			p = p->next;
		}
		cout << endl;
	}
}
//入队一个元素
LinkQueue EnQueue(LinkQueue Q)
{
    
    
	int e;
	cout << "请输入入队元素:";
	cin >> e;
	QPtr p;
	p = (QPtr)malloc(sizeof(QNode));
	p->next = NULL;
	p->data = e;
	Q.rear->next = p;
	Q.rear = Q.rear->next;
	return Q;
}
//出队一个元素
LinkQueue DeQueue(LinkQueue Q)
{
    
    
	QPtr p;
	if (Q.front == Q.rear)
		cout << "队空,无法完成出队操作";
	p = Q.front->next;
	Q.front->next = p->next;
	free(p);
	return Q;
}
//获取队首元素
void  GetfirstQueue(LinkQueue Q)
{
    
    
	if (Q.front == Q.rear)
		cout << "队空,无法完成获取队首元素操作";
	else
	{
    
    
		cout << "队首元素为:";
		cout << Q.front->next->data;
	}
	cout << endl;
}
//清空队列
LinkQueue ClearQueue(LinkQueue Q)
{
    
    
	while (Q.front->next != Q.rear)
	{
    
     
		QPtr p;
		p = Q.front->next;
		Q.front->next = p->next;
		free(p);
	}
	while(Q.front->next == Q.rear)
	{
    
    
		QPtr p;
		p = Q.front->next;
		p->next = NULL;
		Q.rear = Q.front;
		Q.front->next = NULL;
		free(p);
	}
	return Q;
}
//判断队列是否空为空
void JudgeQueue(LinkQueue Q)
{
    
    
	if (Q.front == Q.rear)cout << "队空"<<endl;
	else cout << "队列不为空"<<endl;
}
//求队列长度
void GetQueuelength(LinkQueue Q)
{
    
    
	int num = 0;
	if (Q.front == Q.rear)num = 0;
	QPtr p;
	p = Q.front->next;
	while (p)
	{
    
    
		p = p->next;
		num++;
	}
	cout << "队列长度为:" << num << endl;
}
int main()
{
    
    
	int m;
	LinkQueue Q;
	while (1)
	{
    
    
		Sleep(1000);
		cout << "*********操作介绍*********" << endl;
		cout << "    1、创建一个链式队列    " << endl;
		cout << "    2、入队一个元素        " << endl;
		cout << "    3、出队一个元素        " << endl;
		cout << "    4、获取队首元素        " << endl;
		cout << "    5、清空队列            " << endl;
		cout << "    6、判断队列是否空为空   " << endl;
		cout << "    7、求队列长度          " << endl;
		cout << "    8、输出链式队列        " << endl;
		cout << "    9、退出操作系统        " << endl;
		cout << "**************************" << endl;
		cout << "请输入你的操作代号:";
		cin >> m;
		switch (m)
		{
    
    
		case 1:
			Q = InitQueue();
			break;
		case 2:
			Q=EnQueue(Q);
			break;
		case 3:
			Q=DeQueue(Q);
			break;
		case 4:
			GetfirstQueue(Q);
			break;
		case 5:
			Q=ClearQueue(Q);
			break;
		case 6:
			JudgeQueue(Q);
			break;
		case 7:
			GetQueuelength(Q);
			break;
		case 8:
			putQueue(Q);
			break;
		}
		if (m == 9)break;
	}
	while (1);
	return 0;
}

Guess you like

Origin blog.csdn.net/gets_s/article/details/105100468