当前位置:网站首页>链队
链队
2022-08-04 20:42:00 【柯基@】
链队就是采用链式存储结构存储队列,这里采用单链表来实现 ~
- 链队定义
/* 链队结点类型定义,定义下图中 A,B,C 结点 */
typedef struct QNode{
int data;
struct QNode *next;
}QNode;
/* 链队类型定义,可理解为链队列的 “头结点” ,与单链表的头结点相比,链队列的头结点必不可少 */
typedef struct{
QNode *front;
QNode *rear;
}LiQueue;
- 初始化
void initQueue(LiQueue *&lqu){
lqu=(LiQueue*)malloc(sizeof(LiQueue)); //为链队列的 “头结点” 申请空间
lqu->front=lqu->rear=NULL; //头、尾指针皆指向空
}
- 判断队空
int isEmpty(LiQueue *lqu){
if(lqu->rear==NULL || lqu->front=NULL)
return 1;
else
return 0;
}
- 入队
/* 思路:链队的特点就是不存在队列满上溢的情况,所以不用考虑队满的情况。 1.申请空间,创建结点,其 data 为 x 2.若为原始队列为空队,则头、尾指针都指向新插结点 3.不为空队,则尾插法,即:lqu->rear->next=q; lqu->rear=q; */
void enQueue(LiQueue *lqu,int x){
QNode *p; //为将要插入的值 x 创建结点
p=(QNode*)malloc(sizeof(QNode));
p->data=x;
p->next=NULL;
if(lqu->rear==NULL)
lqu->front=lqu->rear=p; //队列中只有一个结点时,front 和 rear 指向同一结点
else{
lqu->rear->next=p; //尾插法
lqu->rear=p;
}
}
- 出队
/* 思路:存在空队情况,记得考虑 1.判断是否为空队列,若为空,则直接退出 2.不为空,则采用头删法出队,但注意要分情况 3.情况一:删完后队列没有结点 。情况二:删完后队列还有结点 。 */
int deQueue(LiQueue *lqu,int &x){
if(lqu->rear==NULL || lqu->front==NULL)
return 0;
else
QNode *p;
p=lqu->front; //指向即将被删的结点
if(lqu->front==lqu->rear) //队列中只有一个结点时的出队操作需特殊处理
lqu->front=lqu->rear=NULL;
else
lqu->front=lqu->front->next; //头删法
x=p->data;
free(p);
return 1;
}
与链队相比,️顺序队 的定义、操作等都要简单,因此在考研的程序设计题目中,要尽量采用顺序队来解决问题,尽可能地避免用链队,除非题目明确规定要用链队。
边栏推荐
猜你喜欢
随机推荐
Elastic Search 根据匹配分和热度分排序
MySQL字段类型
【TypeScript】深入学习TypeScript枚举
Feign 与 OpenFeign
EasyUi常用代码
jMeter Thread group 对应的 constant timer
composition-api
刷题-洛谷-P1307 数字反转
Chrome安装zotero connector 插件
泰山OFFICE技术讲座:底纹、高亮、边框的关系
Five Minutes Introductory Text Processing Three Musketeers grep awk sed
漫画 | 老板裁掉我两周后,又把我请回去,工资翻番!
ts集成和使用
DICOM医学影像协议
[Data Mining] Written Exam Questions for Sohu Data Mining Engineers
node 的运行命令
关于 SAP 电商云 Spartacus UI SSR 的 state transfer 问题
MYSQL gets the table name and table comment of the database
经验分享|盘点企业进行知识管理时的困惑类型
Zero-knowledge proof notes - private transaction, pederson, interval proof, proof of ownership