09 队列的链式存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了09 队列的链式存储相关的知识,希望对你有一定的参考价值。

原理:队列的头指针指向头节点,尾指针执行最后一个节点。队列 + 有头链表。先进先出FIFO。

添加:在队尾添加一个节点;

删除:在对头删除一个节点,如果是最后一个节点需要更新rear值。

技术分享

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct node
 5 {
 6     int data;
 7     struct node *next;
 8 }LinkNode;
 9 
10 typedef struct
11 {
12     LinkNode  *front;
13     LinkNode *rear;
14 }linkQueue;
15 
16 linkQueue *linkQueue_init()
17 {
18     linkQueue *q = (linkQueue *)malloc(sizeof(linkQueue));
19     LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));
20     head->next = NULL;
21 
22     q->front = head;
23     q->rear = head;
24 
25     return q;
26 }
27 
28 int linkQueue_is_empty(linkQueue *q)
29 {
30     return q->front == q->rear ? 1 : 0;
31 }
32 
33 int linkQueue_add(linkQueue *q, int data)
34 {
35     LinkNode *node = (LinkNode *)malloc(sizeof(LinkNode));
36 
37     node->data = data;    
38     node->next = NULL;
39     q->rear->next = node;
40     q->rear = node;
41 
42     return 0;
43 }
44 
45 int linkQueue_del(linkQueue *q, LinkNode **data)
46 {
47     if (linkQueue_is_empty(q))
48     {
49         return -1; 
50     }
51 
52     *data = q->front->next;
53     q->front->next = (*data)->next;
54 
55     if (*data == q->rear)
56     {
57         q->rear = q->front; 
58     }
59 
60     return -1;
61 }
62 
63 int main()
64 {
65     linkQueue *q = NULL;
66     int i = 0;
67     LinkNode *tmp = NULL;
68 
69     q = linkQueue_init();
70 
71     for (i = 0; i < 10; i++)
72     {
73         linkQueue_add(q, i); 
74     }
75 
76     while (!linkQueue_is_empty(q))
77     {
78         linkQueue_del(q, &tmp); 
79         printf("data:%d\\n", tmp->data);
80         free(tmp);
81     }
82 
83     return 0;
84 }

 

以上是关于09 队列的链式存储的主要内容,如果未能解决你的问题,请参考以下文章

09 队列的链式存储

数据结构学习笔记——链式存储结构实现队列(链队)

数据结构学习笔记——链式存储结构实现队列(链队)

队列(Queue)的链式存储结构以及双端队列的相关概念(C语言)

队列的定义循环队列的顺序存储结构及链式存储结构

数据结构之链式队列的代码实现及有趣应用