C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程《基础数据结构和算法 (C版本)》,
照着老师所讲抄的,
视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1
喜欢的朋友可以去看看,欢迎大家一起交流学习。
LinkStack.h
1 #ifndef LINKSTACK_H
2 #define LINKSTACK_H
3
4 #include <stdio.h>
5 #include <stdlib.h>
6
7
8 // 链式栈的节点
9 typedef struct LINKNODE{
10 struct LINKNODE* next;
11 }LinkNode;
12
13 // 链式栈
14
15 typedef struct LINKSTACK{
16 LinkNode HeadNode; //头节点
17 int size;
18 }LinkStack;
19
20 // 初始化
21 LinkStack* Init_LinkStack();
22 // 入栈
23 void Push_LinkStack(LinkStack* stack,LinkNode* data);
24 // 出栈 (删除第一个元素)
25 void Pop_LinkStack(LinkStack* stack);
26 // 返回栈顶元素
27 LinkNode* Top_LinkStack(LinkStack* stack);
28 // 返回栈元素的个数
29 int Size_LinkStack(LinkStack* stack);
30 // 清空栈
31 void Clear_LinkStack(LinkStack* stack);
32 // 销毁栈
33 void FreeSpace_LinkStack(LinkStack* stack);
34
35
36
37 #endif
LinkStack.c
1 #include "LinkStack.h"
2
3
4 // 初始化
5 LinkStack* Init_LinkStack(){
6
7 // 开内存
8 LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));
9 // 初始化
10 stack->HeadNode.next = NULL;
11 stack->size = 0;
12
13 return stack;
14 }
15
16 // 入栈
17 void Push_LinkStack(LinkStack* stack,LinkNode* data){
18
19 if(stack == NULL){
20 return;
21 }
22 if(data == NULL){
23 return;
24 }
25
26 data->next = stack->HeadNode.next;
27 stack->HeadNode.next = data;
28
29 stack->size++;
30
31 }
32
33 // 出栈 (删除第一个元素)
34 void Pop_LinkStack(LinkStack* stack){
35
36 if(stack == NULL){
37 return ;
38 }
39 if(stack->size==0){
40 return ;
41 }
42
43 // 第一个有效节点
44 LinkNode* pNext = stack->HeadNode.next;
45 stack->HeadNode.next = pNext->next; // pNext.next为第一个有效节点的下一个节点
46
47 stack->size--;
48
49 }
50
51 // 返回栈顶元素
52 LinkNode* Top_LinkStack(LinkStack* stack){
53
54 if(stack == NULL){
55 return NULL;
56 }
57 if(stack->size==0){
58 return NULL;
59 }
60
61 return stack->HeadNode.next;
62 }
63
64 // 返回栈元素的个数
65 int Size_LinkStack(LinkStack* stack){
66 if(stack == NULL){
67 return -1;
68 }
69 return stack->size;
70 }
71
72 // 清空栈
73 void Clear_LinkStack(LinkStack* stack){
74
75 if(stack == NULL){
76 return;
77 }
78 stack->HeadNode.next = NULL;
79 stack->size=0;
80
81 }
82
83 // 销毁栈
84 void FreeSpace_LinkStack(LinkStack* stack){
85
86 if(stack == NULL){
87 return;
88 }
89
90 free(stack);
91
92
93 }
06 栈的链式存储20220611_main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "LinkStack.c"
6
7 // 栈数据(用户数据)
8 typedef struct PERSON{
9 LinkNode node;
10 char name[32];
11 int age;
12 }Person;
13
14
15 int main(){
16 printf("好好学习,天天向上~!!!\t\t\t 06 栈的链式存储20220611\n\n");
17
18 // 初始化
19 LinkStack* stack = Init_LinkStack();
20
21 // 创建用户数据
22 Person p1,p2,p3,p4,p5;
23 strcpy(p1.name,"aaa");
24 strcpy(p2.name,"bbb");
25 strcpy(p3.name,"ccc");
26 strcpy(p4.name,"ddd");
27 strcpy(p5.name,"eee");
28 p1.age=18;
29 p2.age=19;
30 p3.age=20;
31 p4.age=21;
32 p5.age=22;
33
34
35 // 入栈
36 Push_LinkStack(stack,(LinkNode*)&p1);
37 Push_LinkStack(stack,(LinkNode*)&p2);
38 Push_LinkStack(stack,(LinkNode*)&p3);
39 Push_LinkStack(stack,(LinkNode*)&p4);
40 Push_LinkStack(stack,(LinkNode*)&p5);
41
42
43
44 // 输出
45 while(Size_LinkStack(stack)>0){
46 // 取出栈顶元素
47 Person* p = (Person*)Top_LinkStack(stack);
48 printf("姓名:%s\t年龄:%d\n",p->name,p->age);
49
50 // 出栈(删除栈顶元素,也就是删除链的第一个元素)
51 Pop_LinkStack(stack);
52 }
53
54
55
56 // 销毁栈
57 FreeSpace_LinkStack(stack);
58
59
60 printf("\n\n");
61 system("pause");
62
63 return 0;
64 }
C语言- 基础数据结构和算法 - 栈的链式存储的更多相关文章
- C语言- 基础数据结构和算法 - 栈的顺序存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- guoshiyv 数据结构与算法2-1 线性链式存储
线性链式存储: 包含两部分:1.存储的单个元素 2.指针,指向下一个的地址 typedef struct() { ElementType Data; struct Node *Next; }Lis ...
- C++编程练习(4)----“实现简单的栈的链式存储结构“
如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...
- 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 喜欢的朋友可 ...
随机推荐
- 通过CSS给图像设置圆角边框
<html> <style> .smaller-image{ border-radius: 50%; width: 100px; } </style> <bo ...
- I/O 引脚
我们以网卡举例 引脚,芯片,pcb板之间的关系非常紧密 1.引脚,又叫管脚,英文叫Pin. 就是从集成电路(芯片)内部电路引出与外围电路的接线,所有的引脚就构成了这块芯片的接口.引线末端的一段,通过软 ...
- Pinpoint介绍及docker安装方式
一.介绍 Pinpoint是用Java编写的大型分布式系统的APM(Application Performance Management应用程序性能管理)工具,受Dapper论文的启发,Pinpoin ...
- [已解决] 含gorm、sqlite3包的go程序构建失败 C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1
gorm官方文档教程实例,构建出现错误.C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit st ...
- 代码源 BFS练习1
BFS练习1 http://oj.daimayuan.top/course/11/problem/147 题目 思路 四个方向进行BFS 注意:此题读写量大,cin会被卡 代码 #include &l ...
- jsp第二周作业
1.p39 实验2 显示当前时间,并输出上午(0-12)好,下午好(13-17),晚上好(18-23) <%@ page language="java" import=&qu ...
- Rust如何开发eBPF应用(一)?
前言 eBPF是一项革命性的技术,可以在Linux内核中运行沙盒程序,而无需重新编译内核或加载内核模块.它能够在许多内核 hook 点安全地执行字节码,主要应用在云原生网络.安全.跟踪监控等方面. e ...
- python selenium 多个页面对象类使用同一个webdriver(即只打开一个浏览器窗口)
1 class BasePage(): 2 """selenium基类""" 3 4 def __init__(self, driver=N ...
- kafka基础原理
1.什么是kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列 消息队列的两种模式: 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除).特点,一个消息只能被一个消费者消费 发 ...
- Web Api源码(路由注册)
这篇文章只是我学习Web API框架的输出,学习方法还是输出倒逼输入比较行得通,所以不管写的好不好,坚持下去,肯定有收获.篇幅比较长,仔细思考阅读下来大约需要几分钟. 做.NET开发有好几年时间了,从 ...