05_队列
一、什么是队列
一种可以实现“先进先出”的数据结构,
队列的分类:
1.静态队列:数组实现
2.链式队列:链表实现
二、队列的具体应用
一切和时间有关的操作都与队列有关,重注优先级。
三、静态队列
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 5 //循环队列的组织方式 6 typedef struct Queue 7 { 8 int *pBase; 9 int front; 10 int rear; 11 }QUEUE,* PQUEUE; 12 13 void init(PQUEUE); 14 void insert_queue(PQUEUE,int val); 15 void treverse_queue(PQUEUE); 16 bool full_queue(PQUEUE); 17 bool out_queue(PQUEUE); 18 bool empty_queue(PQUEUE); 19 20 int main(void) 21 { 22 Queue queue; 23 init(&queue); 24 insert_queue(&queue,1); 25 insert_queue(&queue,2); 26 insert_queue(&queue,3); 27 insert_queue(&queue,4); 28 insert_queue(&queue,5); 29 insert_queue(&queue,6); 30 insert_queue(&queue,7); 31 insert_queue(&queue,8); 32 treverse_queue(&queue); 33 out_queue(&queue); 34 treverse_queue(&queue); 35 } 36 37 void init(PQUEUE pQ) 38 { 39 pQ->pBase = (int*) malloc (sizeof(int) * 6); 40 pQ->front = 0; 41 pQ->rear = 0; 42 } 43 44 bool full_queue(PQUEUE pQ) 45 { 46 if((pQ->rear + 1) %6 == pQ->front){ 47 return true; 48 } 49 return false; 50 } 51 52 void insert_queue(PQUEUE pQ,int val) 53 { 54 if(full_queue(pQ)) 55 { 56 printf("队列已满,插入失败!\n") ; 57 return ; 58 } 59 pQ->pBase[pQ->rear] = val; 60 pQ->rear = (pQ->rear + 1) % 6; 61 } 62 63 void treverse_queue(PQUEUE pQ) 64 { 65 if(empty_queue (pQ)) { 66 printf("链表为空!\n"); 67 return; 68 } 69 int i = pQ->front; 70 while(i != pQ->rear) 71 { 72 printf("队列数据 : %d \n",pQ->pBase[i]); 73 i = (i+1) %6; 74 } 75 return; 76 } 77 78 bool empty_queue(PQUEUE pQ) 79 { 80 if(pQ->front == pQ->rear){ 81 return true; 82 } 83 else 84 return false; 85 } 86 87 88 bool out_queue(PQUEUE pQ) 89 { 90 91 while(pQ->front != pQ->rear) 92 { 93 pQ->front = (pQ->front + 1) % 6; 94 } 95 }