链式栈讲解

news2024/9/20 5:39:24

文章目录

  • 🍊自我介绍
  • 🍊链式栈
    • 入栈和出栈
    • linkstack.h
    • linkstack.c


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。


🍊链式栈

概念:
  链式栈:插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。
图形:
在这里插入图片描述
链式栈的本质:栈头 + 不带头结点的链表

设计说明:
  先设计结点类型,再设计栈头类型;top保存的是结点首地址.

结点设计和栈头设计代码

typedef char data_t;

//结点类型
typedef struct node
{
	data_t data;
	struct node *next;
	
}linknode_t;

//栈头类型
typedef struct
{
	//栈顶指针
	linknode_t *top;

	//记录当前栈中元素个数
	int n;
}linkstack_t;



入栈和出栈

linkstack.h

#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef char data_t;

//结点类型
typedef struct node
{
	data_t data;
	struct node *next;
	
}linknode_t;

//栈头类型
typedef struct
{
	//栈顶指针
	linknode_t *top;

	//记录当前栈中元素个数
	int n;
}linkstack_t;

extern linkstack_t *create_empty_linkstack();
extern int is_empty_linkstack(linkstack_t *s);
extern void push_linkstack(linkstack_t *s,data_t data);
extern data_t pop_linkstack(linkstack_t *s);
extern data_t pop_linkstack(linkstack_t *s);

#endif

linkstack.c

#include "linkstack.h"

//创建空的链式栈——为栈头在堆区分配空间
linkstack_t *create_empty_linkstack()
{
	linkstack_t *s = NULL;
	s = (linkstack_t *)malloc(sizeof(linkstack_t));
	if(NULL == s)
	{
		printf("malloc is fail!\n");
		return NULL;
	}
	memset(s,0,sizeof(linkstack_t));
	return s;
}

//判断栈是否为空
int is_empty_linkstack(linkstack_t *s)
{
	return s->top == NULL ? 1 : 0;
}

//入栈
void push_linkstack(linkstack_t *s,data_t data)
{
	linknode_t *temp = NULL;
	temp = (linklist_t *)malloc(sizeof(linknode_t));
	if(NULL == temp)
	{
		printf("malloc is fail!\n");
		return ;
	}
	temp->data = data;

	//插入数据类似于链表的头插法
	temp->next = s->top;
	s->top =temp;
	//更新n的值
	s->n ++;
	return ;
}

//出栈
data_t pop_linkstack(linkstack_t *s)
{
	linknode_t *temp = NULL;
	data_t data;

	//保存要删除结点的地址
	temp = s->top;
	//取出数据
	data = temp->data;
	//更新指针信息
	s->top = temp->next;
    //释放temp结点
	free(temp);
	temp = NULL;
	//更新n的值
	s->n --;
	
	return data;

}

//输出栈顶元素的值
data_t get_top_data(linkstack_t *s)
{
	return s->top->data;
}

main.c

#include "linkstack.h"

int main()
{
	linkstack_t *s = NULL;
	data_t arry[] = {'a','n','i','h','c'};
	int i;

	s = create_empty_linkstack();

	for(i = 0;i < sizeof(arry)/sizeof(arry[0]);i++)
	{
		push_linkstack(s,arry[i]);
	}
	printf("Top data = %c\n",get_top_data(s));
	while(!is_empty_linkstack(s))
	{
		printf("%c",pop_linkstack(s));
	}
	printf("\n");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UBUNTU20.04安装CH384串口卡驱动

继续上文&#xff1a;统信UOS安装CH384串口卡驱动-CSDN博客 统信UOS系统成功安装CH384串口驱动后&#xff0c;继续在ubuntu20.04下安装驱动&#xff0c;发现一直报错&#xff0c;原因是内核驱动不一致。 解决办法&#xff1a; 1. 下载最新的驱动。CH35XCH384驱动源文件资源-C…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

报错合计-1

向开发描述&#xff1a;先勾选一个病灶后复制&#xff0c;控制台报错 报错类型查询后为前端DOM节点相关报错&#xff0c;提给前端开发 报错解释&#xff1a; TypeError: Failed to execute selectNode on Range: parameter 1 is not of type Node 这个错误表明你尝试使用 Range…

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…

Flink官方文档

Flink官方文档&#xff08;全面、详细&#xff09;&#xff1a;https://nightlies.apache.org/flink/flink-docs-master/zh/

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…

116页PPT麦肯锡方法详解-用简单的方法做复杂的事

读者朋友大家好&#xff0c;最近有会员朋友咨询晓雯&#xff0c;需要《116页PPT麦肯锡方法详解-用简单的方法做复杂的事》资料&#xff0c;欢迎大家文末扫码下载学习。 以下是在实际工作中应用麦肯锡问题解决法的具体方式&#xff1a; 一、项目管理与流程优化领域 界定问题 …

再看Java-笔试

放在前面的话 最近确实有些空闲&#xff0c;分配的功能从一开始的两眼一黑到现在的一上午就能完成&#xff0c;这何尝不是一种进步呢。 该说不说&#xff0c;海康的API问题相比较其他第三方的API还是蛮多的&#xff0c;而且10月份人工客服还会停运&#xff0c;不过到那个时候…

LeetCode54. 螺旋矩阵(2024秋季每日一题 21)

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matrix [[1,…

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示&#xff0c;他们的开发人员目前使用人工智能来生成代码&#xff0c;57% 的人表示这已成为一种常见做法。 然而&#xff0c;72% 的人认为他们别无选择&#xff0c;只能允许开发人员使用人工智能来保持竞争力&#xff0…

【Unity】对象池 - 未更新完

自定义泛型对象池 文章目录 自定义泛型对象池封装泛型类例子 使用Unity自带对象池 封装泛型类 public abstract class MyPool<T> : MonoBehaviour where T :Component {[SerializeField] protected T prefab; // 生成的预制体[SerializeField] protected int defaultNum…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

8.sklearn-模型保存

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.保存模型代码工程运行结果生成文件 2.加载模型代码工程运行结果 环境配置&#xff08;必看&#xff09; Anaconda-创建虚拟环境的手把手教程相关环境配置看此篇文章&#xff0c;本专栏深度学习相关的版本和配置&…

HTML基础和常用标签

“合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;1. HTML的基本结构解释&#xff1a; 2. 常见标签的介绍2.1 标题和文本2.2 链接和图片2.3 列表2.4 …

云安全 | AWS S3存储桶安全设计缺陷分析

什么是AWS S3&#xff1f; 默认情况下&#xff0c;Amazon S3 是安全的。创建后&#xff0c;只有资源所有者才能访问他们创建的 Amazon S3 资源。 Amazon S3 支持用户身份验证来控制对数据的访问。您可以使用存储桶策略和访问控制列表 (ACL)等访问控制机制来有选择地向用户和用…

solidwork直线画圆弧的操作

效果如下&#xff1a; 踩过好多坑了。 首先选择直线 先点一下这个点拉出来再回到这个点&#xff08;这个过程点一次就可以了&#xff09;&#xff0c;注意注意一定要这么做&#xff01;否则没有圆弧

prime1靶机渗透 (信息收集 内核提权)

靶机信息 vulnhub靶机 prime1 主机发现 -sn 是scan and no port hack 只用于主机发现 ┌──(kali㉿kali)-[~] └─$ sudo nmap -sn 192.168.50.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 02:25 EDT Nmap scan report for 192.168.50.1 Host is up …

web学习——day1

1.web标准 2.html和css 此时&#xff0c;学完这一部分&#xff0c;你web的具体的结构已经有了 但是呢&#xff0c;这还是太单调了&#xff0c;我们应该加点儿样式&#xff0c;这就该用到CSS了 CSS引入方式 样式1&#xff1a;颜色 样式2&#xff1a;哪怕对于同一类事物&#xf…

消息队列-Kafka(概念篇)

1 为什么需要消息队列&#xff1f; 消息队列是一种基于消息的异步通信机制&#xff0c;用于在分布式系统中不同组件或服务之间传递数据和通知。实际上可以将消息队列看作为存放消息的容器&#xff0c;参与消息传递的分别称为生产者&#xff08;发送消息&#xff09;和消费者&am…