队列

队列的顺序存储

#include<iostream>
using namespace std;
#define MaxSize 10
#define ERROR 0
#define TRUE 1
typedef int ElemType;
typedef struct QNode
{
	ElemType data[MaxSize];
	int rear;
	int front;
}QNode;
void AddQ(QNode* PtrQ,ElemType item)//进入队列
{
	if((PtrQ->rear+1)%MaxSize==PtrQ->front)
	{
		cout<<"队列满";
		return ;
	}
	PtrQ->rear++;
	PtrQ->data[PtrQ->rear]=item;
}
ElemType DeleteQ(QNode* PtrQ)//出队列
{
	if(PtrQ->front==PtrQ->rear)
	{
		cout<<"队列空";
		return ERROR;
	}
	else
	{
		PtrQ->front++;
		return PtrQ->data[PtrQ->front];
	}
}

队列的链式存储

#include <iostream>
using namespace std;
#define ERROR 0
#define TRUE 1;
#define MaxSize 10;
typedef int ElemType;

typedef struct Node {
	ElemType data;
	struct Node *next;
} Node;

typedef struct QNode {
	struct Node *rear;
	struct Node *frond;
} QNode;

bool IsEmpty(QNode *PtrQ) {//判断是否是空队列
	return (PtrQ->frond == NULL);
}

ElemType DeleteQ(QNode *PtrQ) { //出队列,头指针往前移
	Node *FrondCell = new Node;
	ElemType FrondElem;
	if (PtrQ->frond == PtrQ->rear) {
		cout << "队列为空";
		return ERROR;
	}
	FrondCell = PtrQ->frond;
	if (PtrQ->frond == PtrQ->rear)
		PtrQ->frond = PtrQ->rear = NULL;
	else
		PtrQ->frond = PtrQ->frond->next;
	FrondElem = FrondCell->data;
	delete FrondCell;
	return FrondElem;
}

void AddQ(QNode *PtrQ, ElemType item) { //入队
	Node *temp = new Node;
	temp->next = NULL;
	temp->data = item;
	if (PtrQ->frond == NULL) {//如果队列为空,需要修改头指针
		PtrQ->frond = temp;
		PtrQ->rear = temp;
		return ;
	}
	PtrQ->rear->next = temp;
	PtrQ->rear = temp;
}

void DispQ(QNode *PtrQ) {
	Node *p = PtrQ->frond;
	while (p != NULL) {
		cout << p->data << " ";
		p = p->next;
	}
}

int main() {
	QNode *PtrQ = new QNode;
	PtrQ->frond = PtrQ->rear = NULL;
	for (int i = 1; i <= 10; i++)
		AddQ(PtrQ, i);
	DispQ(PtrQ);
	cout << endl;
	cout << DeleteQ(PtrQ) << endl;
	DispQ(PtrQ);
}
posted @ 2022-01-27 14:36  帝宝单推人!  阅读(30)  评论(0)    收藏  举报