其他分享
首页 > 其他分享> > 数据结构——队列

数据结构——队列

作者:互联网

1、队列

Queue

定义

队列是只允许在一端进行插入,在另一端删除的线性表。

基本操作

创、销:

增、删:

查:

其他常用操作:

2、顺序实现队列

用顺序存储方式实现的队列

#define Maxsize 10
typedef struct{
	ElemType data[MaxSize];  //静态数组存放队列元素
	int front,rear;  //队头指针和队尾指针
}SqQueue;

基本操作

初始化队列

void InitQueue(SqQueue &Q){
	//初始时,队头队尾指针指向0
	Q.rear=Q.front=0;
}

入队操作

注意队列已满的条件,rear指针的位置

bool EnQueue(SqQueue &Q, ElemType x){
	if((Q.rear+1)%MaxSize==Q.front)
		return false;
	Q.data[Q.rear] = x;
	Q.rear=(Q.rear+1)%MaxSize; //循环队列
	return true;
}

在这里插入图片描述

出队操作

bool DeQueue(SqQueue &Q, ElemType x){
	if(Q.rear==Q.front)
		return false;
	x = Q.data[Q.front];
	Q.front=(Q.front+1)%MaxSize; //循环队列
	return true;
}

读队头元素

bool GetHead(SqQueue Q, ElemType &x){
	if(Q.rear==Q.front)
		return false;
	x = Q.data[Q.front];
	return true;
}

判断队列是否为空

void QueueEmpty(SqQueue Q){
	if(Q.rear==Q.front)
		return true;
	else
		return false;
}

3、链式实现队列

用链式存储方式实现队列

typedef struct Linknode{	//链式队列结点
	ElemType data; 
	struct Linknode *next;  
}Linknode;

typedef struct{		//链式队列
	Linknode *front, *rear;
}LinkQueue;

基本操作

初始化

void InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(Linknode *)malloc(sizeof(Linknode));
	Q.font->next=NULL;
}

入队操作

void EnQueue(LinkQueue &Q, ElemType x){
	Linknode *s = (Linknode *)malloc(sizeof(Linknode));
	s->data=x;
	s->next=NULL;
	Q.rear->next=s;
	Q.rear=s;
}

出队操作

bool DeQueue(LinkQueue &Q, ElemType &x){
	if(Q.font==Q.rear)
		return false;
	Linknode *p=Q.front->next;
	x=p->data;
	Q.front->next=p->next;
	if(Q.rear==p)
		Q.rear=Q.front;
	free(p);
	return true;
}

标签:return,队列,next,front,数据结构,Linknode,rear
来源: https://blog.csdn.net/weixin_43900568/article/details/118574014