C语言- 基础数据结构和算法 - 队列的顺序存储
听黑马程序员教程《基础数据结构和算法 (C版本)》,
照着老师所讲抄的,
视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1
喜欢的朋友可以去看看,欢迎大家一起交流学习。
/*
队列:先进先出,后进后出,像排队一样。
队头:队伍的前面(出口)。
队尾:队伍的后面(入口)。
插入:从队尾插入。
出队:从队头删除。
*/
SeqQueue.h
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
SeqQueue.c
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 }
07 队列的顺序存储20220611_main.c
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 }
C语言- 基础数据结构和算法 - 队列的顺序存储的更多相关文章
- C语言- 基础数据结构和算法 - 栈的顺序存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- C语言- 基础数据结构和算法 - 09 栈的应用_中缀表达式转后缀表达式20220611
09 栈的应用_中缀表达式转后缀表达式20220611 听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/ ...
- C语言- 基础数据结构和算法 - 08 栈的应用_就近匹配20220611
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- C语言- 基础数据结构和算法 - 循环链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- C语言 - 基础数据结构和算法 - 企业链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- C语言 - 基础数据结构和算法 - 单向链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- C语言- 基础数据结构和算法 - 动态数组
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
随机推荐
- Virtual Function(虚函数)in c++
Virtual Function(虚函数)in c++ 用法: virtual void log() { std::cout << "hello world!" < ...
- Ubuntu安装docker-compose(摘自官网,自用)
安装 Docker Compose 预计阅读时间:8分钟 加速 Docker 桌面中的新功能 Docker Desktop 可帮助您在 Mac 和 Windows 上轻松构建.共享和运行容器,就像在 ...
- crm多对多
多对多要使用service.Associate传入两表的id和中间表的 service.Associate("invoice", entityReferenceInvoice.Id ...
- ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化
聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...
- 防抖-小程序-input输入频繁时搜索出bug
html: <input type="text" class="input_search" placeholder="搜索周边店铺" ...
- 搜索与图论①-深度优先搜索(DFS)
深度优先搜索(DFS) 例题一(指数型枚举) 把 1∼n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序. 输入格式 一个整数 n. 输出格式 按照从小到大的顺序输出所有方案,每行 1 个. ...
- 2021.11.05 eleveni的水省选题的记录
2021.11.05 eleveni的水省选题的记录 因为eleveni比较菜,但是eleveni不想写绿题(总不能说是被绿题虐得不想写),eleveni决定继续水noip原题. --实际上菜菜的el ...
- TCP 协议灵魂 12 问,巩固你的网路底层基础!
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一 ...
- 关于数据拓展及面试题讲解 Java
强类型语言 要求变量的使用严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 Java 的数控类型分为两大类 基本类型(primitive type) 引用类型(reference type) ...
- 理解ASP.NET Core - 发送Http请求(HttpClient)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 前言 在.NET中,我们有很多发送Http请求的手段,如HttpWebRequest.WebC ...