首页 > 代码库 > 顺序循环队列的c语言实现
顺序循环队列的c语言实现
1. 循环队列的顺序存储结构
typedef struct{ QElemType data[MAXSIZE]; int front; /* 头指针 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */}SqQueue;
2. 初始化一个空队列Q
Status InitQueue(SqQueue *Q){ Q->front=0; Q->rear=0; return OK;}
3.将Q清为空队列
Status ClearQueue(SqQueue *Q){ Q->front=Q->rear=0; return OK;}
4. 若队列Q为空队列,则返回TRUE,否则返回FALSE
Status QueueEmpty(SqQueue Q){ if(Q.front==Q.rear) /* 队列空的标志 */ return TRUE; else return FALSE;}
5. 返回Q的元素个数,也就是队列的当前长度
int QueueLength(SqQueue Q){ return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}
6.若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR
Status GetHead(SqQueue Q,QElemType *e){ if(Q.front==Q.rear) /* 队列空 */ return ERROR; *e=Q.data[Q.front]; return OK;}
7.若队列未满,则插入元素e为Q新的队尾元素
Status EnQueue(SqQueue *Q,QElemType e){ if ((Q->rear+1)%MAXSIZE == Q->front) /* 队列满的判断 */ return ERROR; Q->data[Q->rear]=e; /* 将元素e赋值给队尾 */ Q->rear=(Q->rear+1)%MAXSIZE;/* rear指针向后移一位置, */ /* 若到最后则转到数组头部 */ return OK;}
8.若队列不空,则删除Q中队头元素,用e返回其值
Status DeQueue(SqQueue *Q,QElemType *e){ if (Q->front == Q->rear) /* 队列空的判断 */ return ERROR; *e=Q->data[Q->front]; /* 将队头元素赋值给e */ Q->front=(Q->front+1)%MAXSIZE; /* front指针向后移一位置, */ /* 若到最后则转到数组头部 */ return OK;}
9. 从队头到队尾依次对队列Q中每个元素输出
Status QueueTraverse(SqQueue Q){ int i; i=Q.front; while((i+Q.front)!=Q.rear) { visit(Q.data[i]); i=(i+1)%MAXSIZE; } printf("\n"); return OK;}
Status visit(QElemType c){ printf("%d ",c); return OK;}
参考<<大话数据结构>>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。