职场文秘网

首页 > 心得体会 > 工作体会 / 正文

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

2023-02-22 08:20:07

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";

Tags: 队列   详解   实例  

搜索
网站分类
标签列表