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

基本数据结构,循环队列的顺序实现。

时间:2015-10-30 12:01:37      阅读:526      评论:0      收藏:0      [点我收藏+]

标签:

队列是一种先进先出的数据结构,这里用顺序结构将其实现。

1.首先用结构体定义一个队列,front指向队首元素的前面一位,real指向队尾元素。

1 //队列的结构定义
2 #define MAX 6
3 typedef struct {
4     int front,real;
5     int data[MAX];
6 }queue;

2.创建一个循环队列,初始化令front=real=0,因为当队列满时也有front=real,此时无法判断队满;所以我们弃置一个元素位不用,其位置随机,所以队列的实际最大容量为MAX-1。

1 //队列的初始化
2 void InitQueue(queue *s)
3 {
4     s->front=s->real=0; 
5 }

2.入队操作,首先判断队列是否满,此时可能有两种情况:一种是队尾指针到达队首指针的前面一个位置,此时判断条件是  s->real+1==s->front;另一种情况是队尾指针到达该队列的最后一个位置,此时就不能用s->real+1==s->front来判断了,这时可以通过(s->real+1)%MAX==s->front来判断是否队满。若队列不满,则指针下移,下移思路和判断队满一样,移动条件为s->real = (s->real+1)%(MAX),同时给队尾元素赋值

1 //入队
2 void EnQueue(queue *s,int e){
3     if((s->real+1)%MAX==s->front){
4         printf("队列上溢\n");
5         return ;
6     }
7     s->real = (s->real+1)%(MAX);    
8     s->data[s->real] = e;
9 } 

 3.判断队空

1 //队列空返回1,不为空返回0。
2 int EmptyQueue(queue *s){
3     if(s->front==s->real){
4         return 1;
5     }
6     return 0;
7 } 

4.出队操作,如果队列下溢,则函数返回;否则将队首指针后移一位,下移思路和上面一致,都是通过取模运算实现。

1 void DeQueue(queue *s){
2     if(EmptyQueue(s)){
3         printf("队列下溢\n");
4         return ;
5     }
6     s->front=(s->front+1)%MAX;
7 } 

 

基本数据结构,循环队列的顺序实现。

标签:

原文地址:http://www.cnblogs.com/tanxing/p/4921970.html

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