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 其它常见算法 ...
随机推荐
- nodejs教程---基于expressJs框架,实现文件上传(upload)?
文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...
- 在 M1 Mac 上开发 .NET MAUI (iOS)
在 M1 Mac 上开始使用 .NET MAUI 开发 (iOS) 的最简单方法. .NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动 ...
- Intel主板芯片组
写这个的初衷还是由于linux内核本身就是硬件的抽象,如果你对硬件的相关发展,机制以及架构不了解,实际你也是看不懂linux内核代码以及看不懂linux很多命令输出的结果的,如果你看内核代码就会发现内 ...
- @JsonFormat、@DateTimeFormat、@JsonSerialize注解的使用
@JsonFormat 是jackson的注解,用于后台返回前台的时候将后台的date类型数据转为string类型格式化显示在前台,加在get方法或者date属性上面,因为 @JsonFormat 注 ...
- selenium打开指定Chrome账号
selenium打开指定Chrome账号 获取User Data路径 打开目标Chrome,在搜索栏输入chrome://version,找到"个人资料路径". 这里获取到的路径为 ...
- jni有关知识点总结
一.c/c++语言: 1.关于动态链接库的搜索问题: LIBRARY_PATH is used by gcc before compilation to search for directories ...
- 论文解读(MLGCL)《Multi-Level Graph Contrastive Learning》
论文信息 论文标题:Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learn ...
- uniapp-h5之canvans上文本的展示
ctx.font = 'bold 14px arial';ctx.fillStyle = '#e9e6e6';ctx.fillText('长按图片保存到相册', (this.pwidth -250/e ...
- ArcGIS使用技巧(四)——山体阴影
新手,若有错误还请指正! 最近在制图的时候出现如下的情况(图1),怎么调整Display的三个参数都没用. 图 1 查看其信息,发现dem的像元大小为0.00027(图2),是未投影的 图 2 查看A ...
- CS基础课不完全自学指南
本文讲的是计算机学生怎么自学专业课,说长点就是该如何借助网络上已有的高质量学习资源(主要是公开课)来系统性的来点亮自己的CS技能树.这篇文章完全就是一篇自学性质的指南,需要对编程充满热情,起码觉得编程 ...