前言
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.****.net/weixin_53472920/article/details/120327281