首页 > 代码库 > 链式循环队列

链式循环队列

#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;}

 

链式循环队列