C语言- 基础数据结构和算法 - 栈的顺序存储
听黑马程序员教程《基础数据结构和算法 (C版本)》,
照着老师所讲抄的,
视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1
喜欢的朋友可以去看看,欢迎大家一起交流学习。
/*
栈的顺序存储:
栈的顺序存储结构简称【顺序栈】,它是运算受限制的顺序表。
顺序栈的存储结构是:利用一组地址连续的存储单元依次存放自栈底到栈顶的
数据元素,同时附设指针top只是栈顶元素在顺序表中的位置。
设计与实现:
因为栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表来实现。
笔记:
先进后出规则,从栈顶进入,到栈底,
不能遍历。压栈,入栈。出栈(top方法)。
栈,栈容器,只要符合先进后出规则,它就是一个栈容器。
其实栈也就是个链表,只是只能从一端插入或删除。
*/
栈的顺利存储main.c
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include "SeqStack.c"
5
6 /*
7 栈的顺序存储:
8 栈的顺序存储结构简称【顺序栈】,它是运算受限制的顺序表。
9 顺序栈的存储结构是:利用一组地址连续的存储单元依次存放自栈底到栈顶的
10 数据元素,同时附设指针top只是栈顶元素在顺序表中的位置。
11 设计与实现:
12 因为栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表来实现。
13 笔记:
14 先进后出规则,从栈顶进入,到栈底,
15 不能遍历。压栈,入栈。出栈(top方法)。
16 栈,栈容器,只要符合先进后出规则,它就是一个栈容器。
17 其实栈也就是个链表,只是只能从一端插入或删除。
18
19 */
20
21
22 // 用户数据
23 typedef struct PERSON{
24 char name[32];
25 int age;
26 }Person;
27
28 int main(){
29 printf("好好学习,天天向上~!\t\t\t 栈的顺利存储 20220606\n\n\n");
30
31 // 创建栈
32 SeqStack* stack = Init_SeqStack();
33
34 // 创建数据
35 Person p1 = {"pp1",10};
36 Person p2 = {"pp2",10};
37 Person p3 = {"pp3",10};
38 Person p4 = {"pp4",10};
39 Person p5 = {"pp5",10};
40 Person p6 = {"pp6",10};
41 Person p7 = {"pp7",10};
42 Person p8 = {"pp8",10};
43 Person p9 = {"pp9",10};
44 Person p10 = {"pp10",10};
45 Person p11 = {"pp11",10};
46
47 // 入栈
48 Push_SeqStack(stack,&p1);
49 Push_SeqStack(stack,&p2);
50 Push_SeqStack(stack,&p3);
51 Push_SeqStack(stack,&p4);
52 Push_SeqStack(stack,&p5);
53 Push_SeqStack(stack,&p6);
54 Push_SeqStack(stack,&p7);
55 Push_SeqStack(stack,&p8);
56 Push_SeqStack(stack,&p9);
57 Push_SeqStack(stack,&p10);
58 Push_SeqStack(stack,&p11);
59
60 // 输出
61 while(Size_SeqStack(stack)>0){
62 // 访问栈顶元素
63 Person* p = (Person*)Top_SeqStack(stack);
64 printf("p_name:%-4s - p_age:%-4d \n",p->name,p->age);
65 // 出栈
66 Pop_SeqStack(stack);
67
68 }
69
70 // 释放内存
71 FreeSpace_SeqStack(stack);
72
73
74 printf("\n\n");
75 return 0;
76 }
SeqStack.h
1 #ifndef SEQSTACK_H
2 #define SEQSTACK_H
3
4 #include<stdio.h>
5 #include<stdlib.h>
6
7
8 // 用数组模拟栈的顺序存储(栈顶设在数组右边,从右边入和出。类似链表尾插法 )
9
10 #define MAX_SIZE 1024
11 #define SEQSTACK_TRUE 1
12 #define SEQSTACK_FALSE 0
13
14 typedef struct SEQSTACK{
15 void* data[MAX_SIZE];
16 int size;
17 }SeqStack;
18
19
20 // 初始化栈
21 SeqStack* Init_SeqStack();
22
23 // 入栈(尾插法),参数:栈,插入值。
24 void Push_SeqStack(SeqStack* stack,void* data);
25
26 // 返回栈顶元素
27 void* Top_SeqStack(SeqStack* stack);
28
29 // 出栈(删除最后元素)
30 void Pop_SeqStack(SeqStack* stack);
31
32 // 判断是否为空
33 int IsEmpty(SeqStack* stack);
34
35 // 返回栈中元素个数
36 int Size_SeqStack(SeqStack* stack);
37
38 // 清空栈
39 void Clear_SeqStack(SeqStack* stack);
40
41 // 销毁
42 void FreeSpace_SeqStack(SeqStack* stack);
43
44 #endif
SeqStack.c
1 #include "SeqStack.h"
2
3 // 初始化栈
4 SeqStack* Init_SeqStack(){
5
6 SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
7 int i;
8 for(i=0;i<MAX_SIZE;i++){
9 stack->data[i] = NULL;
10 }
11 stack->size = 0;
12 // 这个栈就是一个数组结构体,里面有MAX_SIZE(1024)个数组元素。创建结构体后
13 // 把里面1024个元素都设为NULL,同时size也设为0
14 return stack;
15 }
16
17 // 入栈(尾插法),参数:栈,插入值。
18 void Push_SeqStack(SeqStack* stack,void* data){
19
20 if(stack==NULL){
21 return;
22 }
23 if(data==NULL){
24 return;
25 }
26 if(stack->size == MAX_SIZE){ // 元素个数和数组下标相等:放满了,放不下了。
27 return;
28 }
29
30 // 插入到最后。
31 // 【【【【【 size即标记当前元素个数,同时也标记着最后位置】】】】
32 stack->data[stack->size] = data;
33
34 // 标记+1
35 stack->size++;
36
37 }
38
39 // 返回栈顶元素
40 void* Top_SeqStack(SeqStack* stack){
41
42 if(stack==NULL){
43 return;
44 }
45 if(stack->size ==0){
46 return;
47 }
48
49 return stack->data[stack->size -1]; // 减1,因为数组是从0开始。
50
51 }
52
53 // 出栈(删除最后元素)
54 void Pop_SeqStack(SeqStack* stack){
55 if(stack==NULL){
56 return;
57 }
58 if(stack->size ==0){
59 return;
60 }
61
62 stack->data[stack->size -1] = NULL;
63 // 也可以置空,也可以不必置空,因为下面size-1了
64
65 stack->size--;
66
67 }
68
69 // 判断是否为空
70 int IsEmpty(SeqStack* stack){
71
72 if(stack == NULL){
73 return -1;
74 }
75 if(stack->size == 0){
76 return SEQSTACK_FALSE;
77 }
78
79 return SEQSTACK_TRUE;
80 }
81
82 // 返回栈中元素个数
83 int Size_SeqStack(SeqStack* stack){
84
85 if(stack==NULL){
86 return;
87 }
88
89 return stack->size;
90 }
91
92 // 清空栈
93 void Clear_SeqStack(SeqStack* stack){
94
95 if(stack == NULL){
96 return;
97 }
98
99 int i;
100 for(i=0;i<stack->size;i++){
101 stack->data[i] = NULL;
102 }
103 // 上面可以把每个元素都置NULL,也可以不必置NULL,因为下面size=0了。
104
105 stack->size = 0;
106
107 }
108
109 // 销毁
110 void FreeSpace_SeqStack(SeqStack* stack){
111
112 if(stack == NULL){
113 return;
114 }
115
116 free(stack);
117
118 }
C语言- 基础数据结构和算法 - 栈的顺序存储的更多相关文章
- C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- 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 喜欢的朋友可 ...
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
随机推荐
- 《头号玩家》AI电影调研报告(三)
[AR市场正在迅猛增长] 据<工业增强现实现状2017>报告中所述,AR不再只是值得期待的新兴技术.2018年,投资此类技术已成为很多组织机构的关键战略,尤其是对于涉及复杂的制造和运营流程 ...
- 索引优化、Sql查询语句优化
工作中我们经常会遇到系统查询慢的情况,一般我们会采取好多方法进行优化,如建立索引,优化查询Sql,分表,规范数据表结构设计,调整数据库参数(内存分配.缓存等),增加硬件配置,优化网络环境等.下面介绍两 ...
- js中的undefined
undefined,一个特殊值,通常用于指示变量尚未赋值,是一个JavaScript的 原始数据类型 . 如果后台返回前台数据为空(无数据),那么用该对象获取其中的属性会显示undefined. 如果 ...
- 2021.08.16 P1300 城市街道交通费系统(dfs)
2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...
- 『现学现忘』Git基础 — 11、配置Git用户签名的方式
目录 1.配置Git签名 (1)语法 (2)配置系统用户签名 (3)配置全局用户签名 (4)配置本地用户签名 2.查看三个配置文件的用户签名 (1)语法 (2)查看项目/仓库级别的配置文件信息(loc ...
- CV技术指南免费版知识星球
最近公众号的交流群满了,我们决定搞一个免费的知识星球,让大家在里面交流.以往都是我们写原创,大家阅读,读者之间没什么交流.与此同时,在CV技术指南交流群里,大部分问题都得到了很好地解决,但从来没有 ...
- XCTF练习题---MISC---适合作为桌面
XCTF练习题---适合作为桌面 flag:flag{38a57032085441e7} 解题步骤: 1.观察题目,下载附件 2.拿到题目以后是一张图片,切换一下通道,发现一张二维码,使用QR进行翻译 ...
- Open Harmony移植:build lite配置目录全梳理
摘要:本文主要介绍build lite 轻量级编译构建系统涉及的配置目录的用途,分析相关的源代码. 本文分享自华为云社区<移植案例与原理 - build lite配置目录全梳理>,作者:z ...
- wsgiref模块、web框架、django框架简介
"""web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...
- 一个关于 useState 的误解
一个关于 useState 的误解 本文写于 2020 年 11 月 17 日 前两天有人问了我一个问题,他有一段这样的代码: function App() { const [n, setN] = u ...