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 其它常见算法 ...
随机推荐
- Promise原理实现(一):前置知识点
实现promise首先需要了解如下知识点: 1: 高阶函数 (一个函数作为另外一个函数的参数,这个包含的函数就是高阶函数): outer是一个高阶函数,inner函数作为一个参数传递:此处也是闭包 ...
- vue 多级组件数据传递
A包含B组件,B包含C组件 那么A 传递到C 组件可以通过 在B组件中绑定 $attrs 具体代码可以参见github: https://github.com/qiaoqiao10001/vueA ...
- CommonsCollection6反序列化链学习
CommonsCollection6 1.前置知识 1.1.HashSet HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合.继承了序列化和集合 构造函数参数为空的话创建一 ...
- CRLF 漏洞学习和工具使用
原理 CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的.但是如果对输入过滤不严,就会将恶意语句注入 ...
- 6.S081-2021-Lab3 Pgtbl学习笔记
Speed up system calls 根据hints查看kernel/proc.c中的函数proc_pagetable // kernel/proc.c // Create a user pag ...
- mpvue下拉刷新
1 开启下拉刷新 在想要下拉刷新的页面的 main.json 里,添加: { "navigationBarTitleText": "页面标题", "e ...
- Java 使用-安装
Java 使用-安装 官方网站 JDK 下载地址 JDK 历史版本 参考资料 CentOS7系统卸载自带的OpenJDK并安装SUNJDK CentOS7卸载 OpenJDK 安装Sun的JDK8 安 ...
- 几个i的幂的累加公式1^2+2^2+3^2 2~5
1^2+2^2+3^2+--+n^2=n(n+1)(2n+1)/6 1^3+2^3+3^3+...+n^3=(1+2+3+...+n)^2 =[n(n+1)/2]^2 1^4+2^4+3^4+--+n ...
- docker入门_docker安装
docker入门_docker安装 ubuntu 安装 curl -sSL https://get.daocloud.io/docker | sh # 官方安装脚本自动安装 systemctl ena ...
- Effective HPA:预测未来的弹性伸缩产品
作者 胡启明,腾讯云专家工程师,专注 Kubernetes.降本增效等云原生领域,Crane 核心开发工程师,现负责成本优化开源项目 Crane 开源治理和弹性能力落地工作. 余宇飞,腾讯云专家工程师 ...