六、数据结构基础之链队列C语言实现

  1 /*
  2  * 六、数据结构基础之链队列        
  3  * 链队列数据结构:
  4  * 限制在表头删除和表尾插入的单链表
  5  * --- 2012年4月29日 ---by lee
  6  */ 
  7 
  8 #ifndef _LINKED_QUEUE_H
  9 #define _LINKED_QUEUE_H
 10 
 11 #include "Utility.h"
 12 
 13 //元素类型定义
 14 typedef int DataType;
 15 
 16 //链队列中结点结构的定义
 17 typedef struct _QueueNode
 18 {
 19     DataType data;    
 20     struct _QueueNode *next;
 21 } QueueNode; 
 22 
 23 //链队列结构的定义
 24 typedef struct _LinkedQueue
 25 {
 26     QueueNode *front;//指向队列头结点的指针
 27     QueueNode *rear;//指向队列尾结点的指针
 28 } LinkedQueue;
 29 
 30 
 31 //对链队列的基本操作
 32 
 33 void InitQueue(LinkedQueue* queue);//初始化,构造空队
 34 int IsQueueEmpty(LinkedQueue* queue);//判断队是否为空
 35 void EnQueue(LinkedQueue* queue, DataType x);//元素x入队
 36 DataType DeQueue(LinkedQueue* queue);//出队,返回队首元素
 37 DataType QueueFront(LinkedQueue* queue);//取队首元素
 38 
 39 //初始化,构造空队
 40 void InitQueue(LinkedQueue* queue)
 41 {
 42     queue->front=queue->rear=NULL;
 43 }
 44 
 45 //判断队是否为空
 46 int IsQueueEmpty(LinkedQueue* queue)
 47 {
 48     return ((NULL==queue->front) && (NULL==queue->rear));
 49 }
 50 
 51 //元素x入队
 52 void EnQueue(LinkedQueue* queue, DataType x)
 53 {
 54     QueueNode *node=(QueueNode*)malloc(sizeof(QueueNode));
 55     node->data=x;
 56     node->next=NULL;
 57     //判断是否是空队列
 58     if(IsQueueEmpty(queue))
 59     {
 60         queue->rear=queue->front=node;
 61     }
 62     else
 63     {
 64         queue->rear->next=node;//非空队列,则在尾指针后插入
 65         queue->rear=node;//队尾指针指向新的队尾
 66     }
 67 }
 68 
 69 //出队,返回队首元素
 70 DataType DeQueue(LinkedQueue* queue)
 71 {
 72     //判断是否是空队列
 73     if(IsQueueEmpty(queue))
 74         Error("Queue is empty");
 75 
 76     QueueNode *p=queue->front;
 77     DataType ret=p->data;
 78     queue->front=p->next;
 79     //判断是否只有一个结点
 80     if(p==queue->rear)
 81         queue->rear=NULL;//删除最后一个节点时,要修改尾指针
 82     free(p);
 83     p=NULL;
 84     return ret;
 85 }
 86 
 87 //取队首元素
 88 DataType QueueFront(LinkedQueue* queue)
 89 {
 90     if(IsQueueEmpty(queue))
 91         Error("Queue is empty");
 92 
 93     return queue->front->data;
 94 }
 95  
 96 
 97 
 98 #endif
 99 
100 //测试代码
101 /*
102     LinkedQueue q;
103     InitQueue(&q);
104     EnQueue(&q,1);
105     EnQueue(&q,2);
106     printf("Queue Front: %d\n",DeQueue(&q));
107     printf("Queue Front: %d\n",DeQueue(&q));
108     DeQueue(&q);
109 */

转载于:https://www.cnblogs.com/programlee/archive/2012/05/05/2485119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值