前言
hello,大家好,这期文章我们来分享数据结构关于队列的知识。希望对大家有所帮助,闲言少叙,现在开始。
1. 队列的概念及结构
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头
2. 队列的实现
2.1 queue.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<stdio.h> #include<stdbool.h> #include<assert.h> #include<malloc.h> typedef int QDataType; typedef struct QueueNode { struct QueueNode*next; QDataType data; }QueueNode; typedef struct Queue { QueueNode *head; QueueNode *tail; }Queue; void QueueInit(Queue *pq); void QueueDestory(Queue *pq); void QueuePush(Queue *pq,QDataType x); void QueuePop(Queue *pq); QDataType QueueFront(Queue *pq); QDataType QueueBack(Queue *pq); bool QueueEmpty(Queue *pq); int QueueSize(Queue *pq); |
2.2 queue.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include"queue.h" void QueueInit(Queue *pq) { assert (pq); pq->head = pq->tail = NULL; } void QueueDestory(Queue *pq) { assert (pq); QueueNode *cur = pq->head; while (cur) { QueueNode *next = cur->next; free (cur); cur = next; } pq->head = pq->tail = NULL; } void QueuePush(Queue *pq, QDataType x) { assert (pq); QueueNode *newnode = (QueueNode*) malloc ( sizeof (QueueNode)); if (newnode == NULL) { printf ( "malloc fail\n" ); exit (-1); } newnode->data = x; newnode->next = NULL; if (pq->tail == NULL) { pq->head = pq->tail = newnode; } else { pq->tail->next = newnode; pq->tail = newnode; } } void QueuePop(Queue *pq) { assert (pq); assert (!QueueEmpty(pq)); if (pq->head->next == NULL) { free (pq->head); pq->head = pq->tail = NULL; } else { QueueNode *next = pq->head->next; free (pq->head); pq->head = next; } } QDataType QueueFront(Queue *pq) { assert (pq); assert (!QueueEmpty(pq)); return pq->head->data; } QDataType QueueBack(Queue *pq) { assert (pq); assert (!QueueEmpty(pq)); return pq->tail->data; } bool QueueEmpty(Queue *pq) { assert (pq); return pq->head == NULL; } int QueueSize(Queue *pq) { int size = 0; QueueNode *cur = pq->head; while (cur) { QueueNode *next = cur->next; ++size; cur = cur->next; } return size; } |
2.3 test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include"queue.h" void TestOne() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush(&q, 3); QueuePush(&q, 4); while (!QueueEmpty(&q)) { printf ( "%d " , QueueFront(&q)); QueuePop(&q); } printf ( "\n" ); QueueDestory(&q); } int main() { TestOne(); return 0; } |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/weixin_53472920/article/details/120327281