0
点赞
收藏
分享

微信扫一扫

开卷数据结构(6)—— 队列 一学就会,一用就废

大明宫 2022-03-26 阅读 64

目录

🌺队列的定义 

🌺队列的顺序表达与实现

🌷队列顺序存储结构

🌷假溢出

🌷循环队列

🌹循环队列的初始化

🌹循环队列的入队

🌹循环队列的出队

🌷链队列

🌹链栈的初始化

🌹链栈的入队

🌹链栈的出队

🌺每日金句


🌺队列的定义 


 

队列与生活中的排队一样,最早排队的最先离开。

队列有两种存储表示,顺序表示链式表示

🌺队列的顺序表达与实现

🌷队列顺序存储结构

和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次列头到队列尾的元素之外,尚需附设两个整型变量【front】和【rear】分别指示队列头元素及队间的位置(后面分别称为头指针和尾指针)。

队列的顺序存储结构表示如下:

#define   MAXSIZE    100		//队列容量
typedef struct
{
ElemType *base; //存储空间
int front,rear; //队首,队尾
}SqQueue ;

🌷假溢出

如何解决循环链表的这一缺点呢?

🌷循环队列

将顺序队列臆造成一个环状的空间,即把存储队列元素的表从逻辑上视为一个环,称为循环队列

🌹循环队列的初始化

循环队列的初始化就是动态分配一个预定义大小为 MAXSIZE 的数组空间

🔺实现原理

💬 代码演示

Status InitQueue ( SqQueue  &Q )
{
Q.base=new ElemType[MAXSIZE];
if(!Q.base) return OVERFLOW;
Q.front=Q.rear=0;
return OK;
}

🌹循环队列的入队

入队操作是指在队尾插入一个新的元素

🔺实现原理

💬 代码演示 

Status EnQueue(SqQueue &Q,ElemType e)
{
if((Q.rear+1)%MAXSIZE==Q.front) //判满
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}

🌹循环队列的出队

出队操作是删除队头元素

🔺实现原理

💬 代码演示 

Status DeQueue(SqQueue &Q, ElemType &e)
{
if( Q.rear==Q.front )
return ERROR; //判空
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXSIZE;
return OK;
}

🌷链队列

队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表,头指针指向对头结点,尾指针指向队尾结点。

队列的链式存储如图:

队列的链式存储类型可描述为:

typedef struct Qnode
{
ElemType data;
struct QNode * next;
}Qnode,*QueuePtr; //结点
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue; //链队

🌹链栈的初始化

链栈的初始化操作就是构建一个只有头结点的空队。

🔺实现原理

💬 代码演示 

Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
p->next=NULL;
return OK;
}

🌹链栈的入队

🔺实现原理

💬 代码演示 

Status EnQueue(LinkQueue &Q,ElemType e)
{
p=new QNode; //为入队元素分配结点空间,用指针p指向
p->data=e; //将新结点数据域置为e
p->next=NULL;
Q.rear->next=p; //将新结点插入到队尾
Q.rear=p; //修改队尾指针为p
return OK;
}

🌹链栈的出队

🔺实现原理

💬 代码演示 

Status DeQueue(LinkQueue &Q,ElemType &e)
{
if(Q.front==Q.rear) //若队列为空,返回ERROR
return ERROR;
QNode *p=Q.front->next; //保留头元素空间,以备释放
Q.front->next=p->next; //修改头指针的指针域,指向下一结点
if(Q.rear==p) //判断出队元素是否是最后一个元素,若是,将队尾指针重新赋值,指向头结点
Q.rear=Q.front;
delete p; //释放原队头元素的空间
return OK;
}

🌺每日金句

举报

相关推荐

0 条评论