数据结构 - 队列
1.队列
https://blog.csdn.net/LiuBo_01/article/details/80412290
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Node 5 { 6 int data; 7 struct Node* next; 8 }N; 9 10 typedef struct 11 { 12 N* front; 13 N* rear; 14 }Q; 15 16 //初始化队列 17 void Init(Q* q) 18 { 19 //创建一个头结点 20 N* n = (N*)malloc(sizeof(N)); 21 q->front = q->rear = n; //队头和队尾指向头结点 22 q->front->next = NULL; 23 } 24 25 //判断队列是否为空 26 int IsEmpty(Q* q) 27 { 28 if (q->front->next == NULL) 29 { 30 return 1; 31 } 32 return 0; 33 } 34 35 //入队操作 36 void Enter(Q* q, int data) 37 { 38 //创建一个新结点 39 N* n = (N*)malloc(sizeof(N)); 40 n->data = data; //将数据元素赋值给结点的数据域 41 n->next = NULL; //将结点的指针域置空 42 q->rear->next = n; //将原来队列的队尾指针指向新结点 43 q->rear = n; //将队尾指针指向新结点 44 } 45 46 //出队操作 47 void Delete(Q* q,int* data) 48 { 49 if (IsEmpty(q)) 50 { 51 printf("队列为空!\n"); 52 return; 53 } 54 //pDel指向队头元素,由于队头指针front指向头结点,所以pDel指向头结点的下一个结点 55 N* n = q->front->next; 56 *data = n->data; //将要出队的元素赋给data 57 q->front->next = n->next; //使指向头结点的指针指向pDel的下一个结点 58 //如果队列中只有一个元素,将队列置空 59 if (q->rear = n) 60 { 61 q->rear = q->front; 62 } 63 free(n); //释放pDel指向的空间 64 } 65 66 //取队头元素 67 int GetHead(Q* q, int* data) 68 { 69 if (IsEmpty(q)) 70 { 71 printf("队列为空!\n"); 72 return 0; 73 } 74 N* n; 75 n = q->front->next; //pCur指向队列的第一个元素,即头结点的下一个结点 76 *data = n->data; //将队头元素值赋给data 77 return *data; //返回队头元素值 78 } 79 80 //打印队列中的元素 81 void Print(Q* q) 82 { 83 N* n; 84 n = q->front->next; 85 while (n) 86 { 87 printf("%d ", n->data); 88 n = n->next; 89 } 90 printf("\n"); 91 } 92 93 int main() 94 { 95 Q q; 96 int x; 97 Init(&q); 98 Enter(&q,1); 99 Enter(&q,2); 100 Enter(&q,3); 101 Enter(&q,4); 102 Print(&q); 103 Delete(&q,&x); 104 printf("%d\n",x); 105 GetHead(&q,&x); 106 printf("%d\n",x); 107 Print(&q); 108 109 return 0; 110 }
浙公网安备 33010602011771号