链式队列的基本操作

操作介绍:
1、创建一个链式队列
2、入队一个元素
3、出队一个元素
4、获取队首元素
5、清空队列
6、判断队列是否为空
7、求队列长度
8、输出当前的队列
9、退出操作系统

#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;
}

猜你喜欢

转载自blog.csdn.net/gets_s/article/details/105100468