首页 > 代码库 > 循环队列基本操作
循环队列基本操作
/* * 循环队列基本操作。 * 少用一个元素空间,约定以“队列头指针在队列尾指针的下一个位置”作为队列满的标志。 * “队列头指针等于队列尾指针”作为队列空的标志。 */#include <stdio.h>#include <stdbool.h>#include <malloc.h>#define MAXQSIZE 100typedef char ElemType;typedef struct{ ElemType *base; int front; int rear;} Queue;bool InitQueue(Queue *queue);int QueueLength(Queue queue);bool EnQueue(Queue *queue, ElemType e);bool DeQueue(Queue *queue, ElemType *e);int main(){ Queue queue; ElemType elem[26],temp; int i,length; InitQueue(&queue); for (i = 0; i < 26; i++) { elem[i] = ‘A‘+i; EnQueue(&queue, elem[i]); } length = QueueLength(queue); printf("length:%d\n", length); for (i = 0; i < length; i++) { DeQueue(&queue, &temp); putchar(temp); } return 0;}//构造空队列。bool InitQueue(Queue *queue){ queue->base = (ElemType*)malloc(sizeof(ElemType)*MAXQSIZE); if (!queue->base) return false; queue->front = queue->rear = 0; return true;}//求队列长度。int QueueLength(Queue queue){ return (queue.rear - queue.front + MAXQSIZE) % MAXQSIZE;}//插入元素e为队列的队尾元素。bool EnQueue(Queue *queue, ElemType e){ if ((queue->rear + 1) % MAXQSIZE == queue->front) //队列满 return false; queue->base[queue->rear] = e; queue->rear = (queue->rear + 1) % MAXQSIZE; return true;}//删除队列的队头元素,用e返回其值。bool DeQueue(Queue *queue, ElemType *e){ if (queue->front == queue->rear) //队列空 return false; *e = queue->base[queue->front]; queue->front = (queue->front + 1) % MAXQSIZE; return true;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。