栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1.概述:

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

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

2.实例代码:


#define MAX_QSIZE 5 
typedef struct
{
 QElemType *base; 
 int front; 
 int rear; 
}SqQueue;

void InitQueue(SqQueue *Q)
{ 
 Q->base=malloc(MAX_QSIZE*sizeof(QElemType));
 if(!Q->base) 
  exit(OVERFLOW);
 Q->front=Q->rear=0;
}
void DestroyQueue(SqQueue *Q)
{ 
 if(Q->base)
  free(Q->base);
 Q->base=NULL;
 Q->front=Q->rear=0;
}
void ClearQueue(SqQueue *Q)
{ 
 Q->front=Q->rear=0;
}
Status QueueEmpty(SqQueue Q)
{ 
 if(Q.front==Q.rear) 
  return TRUE;
 else
  return FALSE;
}
int QueueLength(SqQueue Q)
{ 
 return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
}
Status GetHead(SqQueue Q,QElemType *e)
{ 
 if(Q.front==Q.rear) 
  return ERROR;
 *e=Q.base[Q.front];
 return OK;
}
Status EnQueue(SqQueue *Q,QElemType e)
{ 
 if((Q->rear+1)%MAX_QSIZE==Q->front) 
  return ERROR;
 Q->base[Q->rear]=e;
 Q->rear=(Q->rear+1)%MAX_QSIZE;
 return OK;
}
Status DeQueue(SqQueue *Q,QElemType *e)
{ 
 if(Q->front==Q->rear) 
  return ERROR;
 *e=Q->base[Q->front];
 Q->front=(Q->front+1)%MAX_QSIZE;
 return OK;
}
void QueueTraverse(SqQueue Q,void(*vi)(QElemType))
{ 
 int i;
 i=Q.front;
 while(i!=Q.rear)
 {
  vi(Q.base[i]);
  i=(i+1)%MAX_QSIZE;
 }
 printf("n");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/65706.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号