用c语言实现链队列功能的菜单,C++_C语言单链队列的表示与实现实例详解,1.概述: C语言的队列(queue) - phpStudy...

C语言单链队列的表示与实现实例详解

1.概述:

C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

而单链队列使用链表作为基本数据结果,因此不存在伪溢出的问题,队列长度也没有限制。但插入和读取的时间代价会比较高

2.实例代码:

/* 单链队列——队列的链式存储结构 */

typedef struct QNode

{

QElemType data;

struct QNode *next;

}QNode,*QueuePtr;

typedef struct

{

QueuePtr front,rear; /* 队头、队尾指针 */

}LinkQueue;

/* 链队列的基本操作(9个) */

void InitQueue(LinkQueue *Q)

{ /* 构造一个空队列Q */

Q->front=Q->rear=malloc(sizeof(QNode));

if(!Q->front)

exit(OVERFLOW);

Q->front->next=NULL;

}

void DestroyQueue(LinkQueue *Q)

{ /* 销毁队列Q(无论空否均可) */

while(Q->front)

{

Q->rear=Q->front->next;

free(Q->front);

Q->front=Q->rear;

}

}

void ClearQueue(LinkQueue *Q)

{ /* 将Q清为空队列 */

QueuePtr p,q;

Q->rear=Q->front;

p=Q->front->next;

Q->front->next=NULL;

while(p)

{

q=p;

p=p->next;

free(q);

}

}

Status QueueEmpty(LinkQueue Q)

{ /* 若Q为空队列,则返回TRUE,否则返回FALSE */

if(Q.front->next==NULL)

return TRUE;

else

return FALSE;

}

int QueueLength(LinkQueue Q)

{ /* 求队列的长度 */

int i=0;

QueuePtr p;

p=Q.front;

while(Q.rear!=p)

{

i++;

p=p->next;

}

return i;

}

Status GetHead_Q(LinkQueue Q,QElemType *e)

{ /* 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */

QueuePtr p;

if(Q.front==Q.rear)

return ERROR;

p=Q.front->next;

*e=p->data;

return OK;

}

void EnQueue(LinkQueue *Q,QElemType e)

{ /* 插入元素e为Q的新的队尾元素 */

QueuePtr p= (QueuePtr)malloc(sizeof(QNode));

if(!p) /* 存储分配失败 */

exit(OVERFLOW);

p->data=e;

p->next=NULL;

Q->rear->next=p;

Q->rear=p;

}

Status DeQueue(LinkQueue *Q,QElemType *e)

{ /* 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */

QueuePtr p;

if(Q->front==Q->rear)

return ERROR;

p=Q->front; /* 指向头结点 */

*e=p->data;

Q->front=p->next; /* 摘下头节点 */

if(Q->rear==p)

Q->rear=Q->front;

free(p);

return OK;

}

void QueueTraverse(LinkQueue Q,void(*vi)(QElemType))

{ /* 从队头到队尾依次对队列Q中每个元素调用函数vi() */

QueuePtr p;

p=Q.front->next;

while(p)

{

vi(p->data);

p=p->next;

}

printf("\n");

}相关阅读:

CentOS下yum安装缺少kernel-headers的解决方法

MVC+jQuery.Ajax异步实现增删改查和分页

node.js中的fs.unlinkSync方法使用说明

javascript实现Email邮件显示与删除功能

node.js抓取并分析网页内容有无特殊内容的js文件

在Fedora系统上配置Proftpd服务器的教程

BootCamp怎么制作WIN10启动U盘和驱动 Mac Bootcamp 安装Win10 图文教程

Win10 Mobile 预览版10586.11现身 升级界面曝光

(图)windows 10 build 9926上手体验:流畅易用,但新功能仍需完善

最新版本PHP 7 vs HHVM 多角度比较

仅一个form表单 js实现注册信息依次填写提交功能

C#利用Windows自带gdi32.dll实现抓取屏幕功能实例

Android获取经纬度计算距离介绍

php程序员应具有的7种能力小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值