码迷,mamicode.com
首页 > 其他好文 > 详细

链式循环队列

时间:2014-09-26 22:59:18      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   sp   div   on   c   

#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  0
struct queueNode{//链式队列的节点类型
    QEleType data;
    struct queueNode *next;
}queue;
typedef struct{
    struct queueNode *front;
    struct queueNode *rear;
}LinkQueue;//链式队列类型
Status InitLinkQueue(LinkQueue &Q){
    //初始化创建空队列Q
Q.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=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;
}

 

链式循环队列

标签:style   blog   color   io   ar   sp   div   on   c   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!