数据结构-第三章-栈和队列(5)-链队

数据结构


⚡️数据结构-第一章
⚡️抽象数据类型案例
⚡️数据结构-第二章(1)-线性结构
⚡️数据结构-第二章(2)-线性表的顺序表示和实现
⚡️数据结构-第二章(3)-顺序表(含代码)
⚡️数据结构-第二章(4)-顺序表案例(含代码)
⚡️数据结构-第二章(5)-链式存储结构
⚡️数据结构-第二章(6)-单链表基本操作的实现
⚡️数据结构-第二章(7)-双向链表和循环链表
⚡️数据结构-第二章(8)-线性表的应用(线性表合并)

链队-队列的链式表示和实现

链队通常用单链表来表示

链队定义

typedef struct QNode
{
    
    
	QElemType data;
	struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
    
    
	QueuePtr front; //队头指针
	QueuePtr rear;	//队尾指针
}LinkQueue;

在这里插入图片描述
在这里插入图片描述

链队列初始化

【算法步骤】

  • ① 生成一个新节点作为头节点,队头和队尾指向此节点

  • ② 头节点的指针域置空

【算法描述】

Status InitQueue(LinkQueue &Q)
{
    
    //构造一个空队列Q
	Q.front=Q.rear=new QNode;
	if(!Q.front) exit(OVERFLOW);
	Q.front->next=NULL;//头节点的指针域置为空
	return OK;
}

在这里插入图片描述

销毁链队列

在这里插入图片描述

入队

【算法描述】

  • ① 为入队元素分配节点空间,用指针p指向

  • ② 将新节点数据域置为e

  • ③ 将新节点插入到队尾

  • ④ 修改队尾指针为p

【算法步骤】

Status EnQueue(LinkQueue &Q, QElemType e)
{
    
    
	p = new QNode;
	p->data=e;
	p->next=NULL;
	Q.rear->next=p;//将新节点插入到对位
	q.rear=p;//修改队尾指针
	return OK;
}

在这里插入图片描述

出队

【算法描述】

  • ① 判断队列是否为空,若空则返回ERROR。

  • ② 临时保存队头元素的空间

  • ③ 修改头节点的指针域,指向下一个节点。

  • ④ 判断出队元素是否为最后一个元素

  • ⑤ 释放队头元素的空间

【算法步骤】

Status DeQueue(LinkQueue &Q, QElemType &e)
{
    
    
	if(Q.front == Q.rear)
		return ERROR;//队空
	p=Q.front->next; //临时变量p保存
	e=p->data;	//e返回值
	Q.front->next=p->next//修改头节点的指针域
	if(Q.rear==p) Q.rear=Q.front;//最后一个元素
	delete p;//释放空间
	return OK;
}

在这里插入图片描述
在这里插入图片描述

求链队列的队头元素

【算法描述】

SElemType GetHead(LinkQueue Q)
{
    
    
	if(Q.front != Q.rear)	//队列非空
		return Q.front->next->data;	//返回值
}

在这里插入图片描述

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

猜你喜欢

转载自blog.csdn.net/CltCj/article/details/122636876
今日推荐