数据结构
⚡️数据结构-第一章
⚡️抽象数据类型案例
⚡️数据结构-第二章(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; //返回值
}
总结
期待大家和我交流,留言或者私信,一起学习,一起进步!