码迷,mamicode.com
首页 > 编程语言 > 详细

一步两步学算法之顺序队列

时间:2015-04-21 00:12:12      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

顺序链表代码  非常简单;

但这个代码会有假溢出的状况出现;

就是在队尾已满的情况下,不断出队后

若在此时进行入队操作 判断队列已满的条件是q->head==q->tail 此时这个条件满足。 但实际队列之前已经出队了好几个,前面还有空余空间,这就是假溢出;(原谅我懒得画图)

假溢出解决办法

1.每次出队后 把所有数据都往前移。这种方法要移动大量数据,效率太低。

2.使用循环队列。这种方法明天再打。

 1 #define QUEUEMAX 15
 2 typedef struct 
 3 {
 4     DATA data[QUEUEMAX];        //队列数组 
 5     int head;                    //队头 
 6     int tail;                    //队尾 
 7 }SeqQueue;
 8 
 9 
10 
11 SeqQueue *SeqQueueInit()        //初始化队列 
12 {
13     SeqQueue *q;
14     if(q=(SeqQueue*)malloc(sizeof(SeqQueue)))   //分配内存
15     {
16         q->head=0;
17         q->tail=0;
18         return q;
19     }
20     else
21         return NULL;
22 }
23 
24 void SeqQueueFree(SeqQueue *q)
25 {
26     if(q!=NULL)
27         free(q);
28 }
29 
30 int SeqQueueIsEmpty(SeqQueue *q)
31 {
32     return (q->head==q->tail);                 //检查队列是否为空 
33 }
34 
35 int SeqQueueIsFull(SeqQueue *q)
36 {
37     return (q->tail==QUEUEMAX);                
38 }
39 
40 int SeqQueueLen(SeqQueue *q)                //获取队列长度 
41 {
42     return (q->tail-q->head);
43 }
44 
45 int SeqQueueIn(SeqQueue *q,DATA data)             //入队操作 
46 {
47     if(q->tail==QUEUEMAX)
48     {
49         printf("队列已满!\n");
50         return 0;
51     }
52     else
53     {
54         q->data[q->tail]=data;
55         tail++;
56         return 1;
57     }
58 }
59 
60 DATA *SeqQueueOut(SeqQueue *q)            //出队操作 
61 {
62     if(q->head==q->tail)
63     {
64         printf("队列为空!\n");
65         return NULL;
66     }
67     else
68     {
69         return &(q->data[q->head++]);
70     }
71 }
72 
73 DATA *SeqQueuePeek(SeqQueue *q)            //获取队头元素 
74 {
75     if(SeqQueueIsEmpty(q))
76     {
77         printf("队列为空!\n");
78         return NULL;
79     }
80     else
81     {
82         return &(q->data[q->head]);
83     }
84 }

 

一步两步学算法之顺序队列

标签:

原文地址:http://www.cnblogs.com/threezj/p/4442856.html

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