首页 > 代码库 > 09 队列的链式存储
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 =http://www.mamicode.com/ 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 = http://www.mamicode.com/q->front->next; 53 q->front->next = (*data)->next; 54 55 if (*data =http://www.mamicode.com/= 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 队列的链式存储
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。