欢迎来到专业的辛易范文网平台! 工作总结 工作计划 心得体会 思想汇报 发言稿 述职报告 教案设计 申请书大全
当前位置:首页 > 范文大全 > 公文范文 > 正文

C语言循环队列表示与实例详解

时间:2023-08-18 19:50:05 来源:网友投稿

1.概述:C语言的队列(queue),是先进先出(FIFO,First-In-First-Out)的线性表数据结构。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插下面是小编为大家整理的C语言循环队列表示与实例详解,供大家参考。

C语言循环队列表示与实例详解

  1.概述:

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

  循环队列可以更简单的防止伪溢出的发生,但是队列大小是固定的。

  2.实例代码:

  /* 队列的顺序存储结构循环队列 */#define MAX_QSIZE 5 /* 最大队列长度+1 */typedef struct QElemType *base; /* 初始化的动态分配存储空间 */ int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */SqQueue;/* 循环队列的基本操作9个 */void InitQueueSqQueue *Q /* 构造一个空队列Q */ Q->base=mallocMAX_QSIZE*sizeofQElemType; if!Q->base /* 存储分配失败 */ exitOVERFLOW; Q->front=Q->rear=0;void DestroyQueueSqQueue *Q /* 销毁队列Q,Q不再存在 */ ifQ->base freeQ->base; Q->base=NULL; Q->front=Q->rear=0;void ClearQueueSqQueue *Q /* 将Q清为空队列 */ Q->front=Q->rear=0;Status QueueEmptySqQueue Q /* 若队列Q为空队列,则返回TRUE;否则返回FALSE */ ifQ.front==Q.rear /* 队列空的标志 */ return TRUE; else return FALSE;int QueueLengthSqQueue Q /* 返回Q的元素个数,即队列的长度 */ returnQ.rear-Q.front+MAX_QSIZE%MAX_QSIZE;Status GetHeadSqQueue Q,QElemType *e /* 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR */ ifQ.front==Q.rear /* 队列空 */ return ERROR; *e=Q.base[Q.front]; return OK;Status EnQueueSqQueue *Q,QElemType e /* 插入元素e为Q的新的队尾元素 */ ifQ->rear+1%MAX_QSIZE==Q->front /* 队列满 */ return ERROR; Q->base[Q->rear]=e; Q->rear=Q->rear+1%MAX_QSIZE; return OK;Status DeQueueSqQueue *Q,QElemType *e /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */ ifQ->front==Q->rear /* 队列空 */ return ERROR; *e=Q->base[Q->front]; Q->front=Q->front+1%MAX_QSIZE; return OK;void QueueTraverseSqQueue Q,void*viQElemType /* 从队头到队尾依次对队列Q中每个元素调用函数vi */ int i; i=Q.front; whilei!=Q.rear viQ.base[i]; i=i+1%MAX_QSIZE; printf"n";

推荐访问:队列 详解 实例 C语言循环队列表示与实例详解 c语言循环队列的表示与实例详解 c语言循环队列例题详解 c语言循环队列的实现 C语言循环队列

猜你喜欢