一、介绍
用一组地址连续的存储单元依次存放从队列头到队列尾的元素叫做顺序队列。
二、顺序队列的实际应用
排队的时候,先买完东西的可以先走,后来的只需要排在队伍的后面,这就是顺序队列的实际应用
同时,也体现出队列的特点:先进先出
三、实现
#ifndef _SEQ_QUEUE_H_
#define _SEQ_QUEUE_H_
typedef int elem_type;
typedef struct SEQ_QUEUE
{
int head;
int tail;
int total;
int len;
elem_type *data;
}QUEUE;
QUEUE *init_SEQ_QUEUE(elem_type size);
bool destory(QUEUE *p);
bool is_empty(QUEUE *p);
bool is_full(QUEUE *p);
bool push(QUEUE *p,elem_type e);//尾删
bool pop(QUEUE *p,elem_type *e);//头出
int get_length(QUEUE *p);
bool clear(QUEUE *p);
#endif
1 #include"SEQ_QUEUE.h"
2 #include <stdio.h>
3 #include <stdlib.h>
4
5
6 QUEUE *init_SEQ_QUEUE(elem_type size)
7 {
8 QUEUE *p = (QUEUE *)malloc(sizeof(QUEUE) * 1);
9 if (p == NULL)
10 {
11 return false;
12 }
13
14 p->data = (elem_type *)malloc(sizeof(elem_type) * size);
15
16 p->head = 0;
17 p->tail = 0;
18 p->len = 0;
19 p->total = size;
20
21 return p;
22 }
23
24 bool destory(QUEUE *p)
25 {
26 if (p == NULL)
27 {
28 return false;
29 }
30
31 free(p->data);
32 free(p);
33
34 return true;
35 }
36
37
38 bool is_empty(QUEUE *p)
39 {
40 if (p == NULL)
41 {
42 return false;
43 }
44
45 return p->len == 0;
46 }
47
48 bool is_full(QUEUE *p)
49 {
50 if (p == NULL)
51 {
52 return true;
53 }
54
55 return p->len == p->total ;
56 }
57
58 bool push(QUEUE *p,int e)//尾删
59 {
60 if (p == NULL)
61 {
62 return false;
63 }
64
65 p->data[p->tail] = e;
66 p->tail++;
67 p->len++;
68 p->tail = p->tail%p->total;
69 return true;
70 }
71 bool pop(QUEUE *p,int *e)//头出
72 {
73 if (p == NULL)
74 {
75 return false;
76 }
77
78 p->data[p->head] = *e;
79 p->head ++;
80 p->len --;
81 p->head = p->head % p->total;
82
83 return true;
84
85 }
86 int get_length(QUEUE *p)
87 {
88 return p->total;
89 }
90
91 bool clear(QUEUE *p)
92 {
93 if (p == NULL)
94 {
95 return false;
96 }
97
98 p->len = 0;
99
100 return true;
101 }
主要实现的功能:
QUEUE *init_SEQ_QUEUE(elem_type size)//队列的初始化
bool destory(QUEUE *p)//队列的销毁
bool is_empty(QUEUE *p)//队列的判空
bool is_full(QUEUE *p)//队列的判满
bool push(QUEUE *p,elem_type e);//尾删
bool pop(QUEUE *p,elem_type *e);//头出
int get_length(QUEUE *p)//求队列的长度
bool clear(QUEUE *p)//清除队列
四、队列的经典例题
-
用两个栈实现队列
-
用两个队列实现栈