原理:队列的头指针指向头节点,尾指针执行最后一个节点。队列 + 有头链表。先进先出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 }
时间: 2024-10-05 05:16:28