首页 > 代码库 > 链式循环队列
链式循环队列
#include<stdio.h>#include<stdlib.h>typedef char QEleType;typedef int Status;#define OK 1#define ERROR 0#define OVERLOW -2#define TRUE 1#define FALSE 0struct queueNode{//链式队列的节点类型 QEleType data; struct queueNode *next;}queue;typedef struct{ struct queueNode *front; struct queueNode *rear;}LinkQueue;//链式队列类型Status InitLinkQueue(LinkQueue &Q){ //初始化创建空队列QQ.front=Q.rear=(struct queueNode *)malloc(sizeof(struct queueNode));//获取头结点,并使Q.front与Q.rear均指向该头结点if(!Q.front)return OVERLOW;//存储空间分配失败Q.front->next=NULL;return OK;}Status queueIsEmpty(LinkQueue &Q){ if(Q.front==Q.rear) return TRUE;//队列为空 else return FALSE;//队列非空}Status insertQueue(LinkQueue &Q,QEleType &e){ //在链式队列Q的队尾端插入元素e; struct queueNode *p; p=(struct queueNode *)malloc(sizeof(struct queueNode));//分配新节点 if(!p)return OVERLOW;//存储空间分配失败 p->data=http://www.mamicode.com/e;p->next=NULL; Q.rear->next=p;//在队尾插入新节点 Q.rear=p; //rear指向新的队尾节点 return OK;}Status deleteQueue(LinkQueue &Q,QEleType &e){ //在链式队列Q的队尾端插入元素e; struct queueNode *p; if(Q.front==Q.rear)return ERROR;//队空则操作出错 p=Q.front->next; e=p->data; Q.front->next=p->next; if(p==Q.rear) //p结点即是队头结点,又是队尾结点时, Q.rear=Q.front;//使rear指向链表头结点 free(p); return OK;}Status getFront(LinkQueue &Q,QEleType &e){ //取队列Q的队头元素值 if(Q.front==Q.rear)return ERROR;//队空,则操作出错 e=Q.front->next->data; return OK;}int main(){ LinkQueue Q; char e; InitLinkQueue(Q); queueIsEmpty(Q); insertQueue(Q,e); deleteQueue(Q,e); getFront(Q,e); return 0;}
链式循环队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。