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 其它常见算法 ...
随机推荐
- jupyter notebook 调用.py文件
方法1.利用 %run xx.py 直接运行得出结果. 方法2:利用 %load xx.py 载入代码再点击Run运行,这种方法的好处是可以方便修改代码. 说明: Jupyter Notebook中以 ...
- MongoDB 数据库开发规范
MongoDB 数据库开发规范 转载自-落雨_ https://developer.aliyun.com/article/255536 简介: mongoDB库的设计 mongodb数据库命名规范:d ...
- 在vue项目中配置webpack
首先我们来看一下使用Vue-cli2与Vue-cli2之后的版本(这里以Vue-cli4版本为例)创建项目目录结构的不同: Vue-cli2(左图)与Vue-cli4(右图)创建项目的目录 从上图可以 ...
- sql语句——DML
DML:增删改表中数据 1. 添加数据: * 语法: * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); * 注意: 1. 列名和值要一一对应. ...
- java 中为什么重写 equals 后需要重写 hashCode
本文为博主原创,未经允许不得转载: 1. equals 和 hashCode 方法之间的关系 这两个方法都是 Object 的方法,意味着 若一个对象在没有重写 这两个方法时,都会默认采用 Objec ...
- Day 007:PAT训练--1108 Finding Average (20 分)
话不多说: 该题要求将给定的所有数分为两类,其中这两类的个数差距最小,且这两类分别的和差距最大. 可以发现,针对第一个要求,个数差距最小,当给定个数为偶数时,二分即差距为0,最小:若给定个数为奇数时, ...
- vscode设置vue文件高亮显示
打开VS Code,左上角 文件->首选项->设置->文本编辑器->文件,点击右侧的"在settings.json中编辑",进入settings.json文 ...
- XCTF练习题---CRYPTO---Railfence解析
XCTF练习题---CRYPTO---Morse解析 flag:cyberpeace{railfence_cipher_gogogo} 解题步骤: 1.观察题目,下载附件进行查看 2.根据题目提示,发 ...
- [AcWing 795] 前缀和
点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], s[N]; int mai ...
- vue - git
今天差不多从中午开始下午一点才开始学的,把git学了一大半了,还好任务不是很多,但是我上午用的时间挺值的,因为我去搞了个cnblogs的背景主题,就是你们现在所看到的这套,这个没搞明白有一通研究的,只 ...