Grundlegende Bedienung der Kettenwarteschlange

Einführung in die Operation:
1. Erstellen einer Kettenwarteschlange
2. Einreihen eines Elements
3. Einreihen eines Elements
4. Abrufen des ersten Elements der
Warteschlange 5. Löschen der Warteschlange
6. Feststellen, ob die Warteschlange leer ist
7. Ermitteln der Warteschlangenlänge
8. Ausgabe die aktuelle Warteschlange
9. Beenden Sie das Betriebssystem

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

Ich denke du magst

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