听黑马程序员教程《基础数据结构和算法 (C版本)》,
照着老师所讲抄的,
视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1
喜欢的朋友可以去看看,欢迎大家一起交流学习。
/*
队列:先进先出,后进后出,像排队一样。
队头:队伍的前面(出口)。
队尾:队伍的后面(入口)。
插入:从队尾插入。
出队:从队头删除。
*/
1 #ifndef SEQQUEUE_H 2 #define SEQQUEUE_H 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 #define MAX_SIZE 1024 8 9 // 顺序队列结构体 10 typedef struct SEQQUEUE{ 11 void* data[MAX_SIZE]; 12 int size; 13 }SeqQueue; 14 15 16 17 // 初始化 18 SeqQueue* Init_SeqQueue(); 19 20 // 入队 21 void Push_SeqQueue(SeqQueue* queue,void* data); 22 23 // 返回队头元素 24 void* Front_SeqQueue(SeqQueue* queue); 25 26 // 出队 27 void Pop_SeqQueue(SeqQueue* queue); 28 29 // 返回队尾元素 30 void* Back_SeqQueue(SeqQueue* queue); 31 32 // 返回大小 33 int Size_SeqQueue(SeqQueue* queue); 34 35 // 清空队列 36 void Clear_SewqQueue(SeqQueue* queue); 37 38 // 销毁 39 void FreeSpace_SeqQueue(SeqQueue* queue); 40 41 #endif
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #include "SeqQueue.h" 5 6 7 // 初始化 8 SeqQueue* Init_SeqQueue(){ 9 10 // 申请内存 11 SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue)); 12 13 int i; 14 for(i=0;i<_MAX_EXT;i++){ 15 queue->data[i]=NULL; 16 } 17 queue->size = 0; 18 19 return queue; 20 } 21 22 // 入队 23 void Push_SeqQueue(SeqQueue* queue,void* data){ 24 25 if(queue==NULL){ 26 return; 27 } 28 if(data==NULL){ 29 return; 30 } 31 if(queue->size == _MAX_EXT){ // 位置不够了就不能插入了。 32 return; 33 } 34 35 // 把数组的左边设为“队头”,插入的时候从右边插入,也就是从尾部位置插入。 36 queue->data[queue->size] = data; 37 queue->size ++; 38 39 } 40 41 // 返回队头元素(第1个元素,也就是位置0的元素) 42 void* Front_SeqQueue(SeqQueue* queue){ 43 44 if(queue == NULL){ 45 return; 46 } 47 if(queue->size == 0){ 48 return; 49 } 50 51 return queue->data[0]; 52 } 53 54 // 出队,删除最左边(0位置)元素,然后把后面元素前移。 55 void Pop_SeqQueue(SeqQueue* queue){ 56 if(queue == NULL){ 57 return; 58 } 59 if(queue->size == 0){ 60 return; 61 } 62 // 前移元素 63 int i; 64 for(i=0;i<queue->size-1;i++){ 65 queue->data[i] = queue->data[i+1]; 66 } 67 68 queue->size--; 69 70 } 71 72 // 返回队尾元素 73 void* Back_SeqQueue(SeqQueue* queue){ 74 if(queue == NULL){ 75 return NULL; 76 } 77 if(queue->size == 0){ 78 return NULL; 79 } 80 81 return queue->data[queue->size-1]; 82 } 83 84 // 返回大小 85 int Size_SeqQueue(SeqQueue* queue){ 86 if(queue == NULL){ 87 return -1; 88 } 89 90 return queue->size; 91 } 92 93 // 清空队列 94 void Clear_SewqQueue(SeqQueue* queue){ 95 if(queue == NULL){ 96 return ; 97 } 98 int i; 99 for(i=0;i<_MAX_EXT;i++){ 100 queue->data[i]=NULL; 101 } 102 queue->size = 0; 103 104 } 105 106 // 销毁 107 void FreeSpace_SeqQueue(SeqQueue* queue){ 108 if(queue == NULL){ 109 return ; 110 } 111 112 free(queue); 113 114 }
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #include "SeqQueue.c" 6 7 /* 8 队列:先进先出,后进后出,像排队一样。 9 队头:队伍的前面(出口)。 10 队尾:队伍的后面(入口)。 11 插入:从队尾插入。 12 出队:从队头删除。 13 */ 14 15 // 用户数据 16 typedef struct PWESON{ 17 char name[32]; 18 int age; 19 }Person; 20 21 int main(){ 22 printf("好好学习,天天向上~!\t\t\t 队列的顺序存储20220611\n\n"); 23 24 // 创建队列 25 SeqQueue* queue = Init_SeqQueue(); 26 27 // 创建数据 28 Person p1,p2,p3,p4,p5; 29 strcpy(p1.name,"aaa"); 30 strcpy(p2.name,"bbb"); 31 strcpy(p3.name,"ccc"); 32 strcpy(p4.name,"ddd"); 33 strcpy(p5.name,"eee"); 34 p1.age=18; 35 p2.age=19; 36 p3.age=20; 37 p4.age=21; 38 p5.age=22; 39 40 // 入队 41 Push_SeqQueue(queue,&p1); 42 Push_SeqQueue(queue,&p2); 43 Push_SeqQueue(queue,&p3); 44 Push_SeqQueue(queue,&p4); 45 Push_SeqQueue(queue,&p5); 46 47 // 输出队尾元素 48 Person* p_back = (Person*)Back_SeqQueue(queue); 49 printf("p_back:\nname:%s\t age:%d \n\n",p_back->name,p_back->age); 50 51 // 输出队头元素,并且出队 52 while(Size_SeqQueue(queue)>0){ 53 54 // 返回队头元素 55 Person* p = (Person*)Front_SeqQueue(queue); 56 printf("name:%s\t age:%d \n",p->name,p->age); 57 58 // 出队 59 Pop_SeqQueue(queue); 60 61 } 62 63 // 销毁 64 FreeSpace_SeqQueue(queue); 65 printf("\n\n"); 66 system("pause"); 67 return 0; 68 }