链栈--c语言实现

news2024/10/5 13:31:40
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// 栈节点的结构体定义
typedef struct StackNode {
    int data;                // 数据域
    struct StackNode *next;  // 指针域,指向下一个节点
} StackNode, *LinkStack;

// 初始化栈
LinkStack InitStack() {
    LinkStack stack = (LinkStack)malloc(sizeof(StackNode));
    if (!stack) {
        exit(EXIT_FAILURE);
    }
    stack->next = NULL;  // 栈顶指针指向NULL,表示空栈
    return stack;
}

// 判断栈是否为空
bool IsEmpty(LinkStack stack) {
    return stack->next == NULL;
}

// 入栈
bool Push(LinkStack stack, int e) {
    StackNode *newNode = (StackNode *)malloc(sizeof(StackNode));
    if (!newNode) {
        exit(EXIT_FAILURE);
    }
    newNode->data = e;
    newNode->next = stack->next;  // 新节点插入到栈顶
    stack->next = newNode;
    return true;
}

// 出栈
bool Pop(LinkStack stack, int *e) {
    if (IsEmpty(stack)) {
        return false;  // 栈为空,无法出栈
    }
    StackNode *temp = stack->next;  // 临时保存栈顶节点
    *e = temp->data;  // 获取栈顶元素的值
    stack->next = temp->next;  // 栈顶指针下移
    free(temp);  // 释放原栈顶节点
    return true;
}

// 获取栈顶元素
bool GetTop(LinkStack stack, int *e) {
    if (IsEmpty(stack)) {
        return false;  // 栈为空,无法获取栈顶元素
    }
    *e = stack->next->data;  // 获取栈顶元素的值
    return true;
}

// 销毁栈
void DestroyStack(LinkStack stack) {
    StackNode *temp;
    while (stack->next != NULL) {
        temp = stack->next;
        stack->next = temp->next;
        free(temp);
    }
    free(stack);
}

int main() {  
    // 初始化一个链栈  
    LinkStack stack = InitStack();  
  
    // 向链栈中压入元素1  
    Push(stack, 1);  
  
    // 向链栈中压入元素2  
    Push(stack, 2);  
  
    // 向链栈中压入元素3  
    Push(stack, 3);  
  
    // 声明一个整型变量来保存栈顶元素的值  
    int topElem;  
  
    // 获取栈顶元素的值,并保存到变量topElem中  
    if (GetTop(stack, &topElem)) {  
        printf("栈顶元素是: %d\n", topElem);  
    }  
  
    // 声明一个整型变量来保存出栈元素的值  
    int poppedElem;  
  
    // 从链栈中弹出一个元素,并保存到变量poppedElem中  
    if (Pop(stack, &poppedElem)) {  
        printf("弹出的元素是: %d\n", poppedElem);  
    }  
    
    if (Pop(stack, &poppedElem)) {  
        printf("弹出的元素是: %d\n", poppedElem);  
    } 
  
    // 判断链栈是否为空  
    if (IsEmpty(stack)) {  
        printf("链栈是空的.\n");  
    } else {  
        printf("链栈不是空的.\n");  
    }  
  
    // 销毁链栈,释放内存  
    DestroyStack(stack);  
  
    // 程序正常结束  
    return 0;  
}

运行结果:

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

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

相关文章

【保姆级教程】Linux上部署Stable Diffusion WebUI和LoRA训练,拥有你的专属图片生成模型

0 写在前面 Stable Diffusion 是当前最火热的图像生成模型之一&#xff0c;目前已经广泛应用于艺术创 作、游戏开发、设计模拟等领域&#xff0c;因其开源生态和易于使用而受到创作者的广泛关注&#xff0c;相比 Midjourney 而言&#xff0c;其最大的优势是完全免费&#xff0…

笔记1--Llama 3 超级课堂 | Llama3概述与演进历程

1、Llama 3概述 https://github.com/SmartFlowAI/Llama3-Tutorial.git 【Llama 3 五一超级课堂 | Llama3概述与演进历程】 2、Llama 3 改进点 【最新【大模型微调】大模型llama3技术全面解析 大模型应用部署 据说llama3不满足scaling law&#xff1f;】…

使用node调用chrome(基于selenium-webdriver包)

下载测试版chrome和chromedriver https://googlechromelabs.github.io/chrome-for-testing/ 把chromedriver复制到chrome的文件里 设置环境变量 编写代码 const { Builder, Browser, By, Key, until } require(selenium-webdriver) const puppeteer require(puppeteer)//查…

Modelsim自动仿真平台的搭建

Modelsim自动仿真平台的搭建 如果要搭建自动仿真平台脚本那就需要更改下面3个文件。run_simulation.bat、complie.do和wave.do文件。注&#xff1a;前提是安装了modulsim并且配置好了环境变量&#xff0c;这里不过多介绍。 一、下面是run_simulation.bat文件的内容 : 注释的…

企业计算机服务器中了devicdata勒索病毒怎么处理,devicdata解密数据恢复

网络技术的不断应用与发展&#xff0c;加快了社会进步的步伐&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络为企业提供了极大便利&#xff0c;大大提高了生产效率&#xff0c;网络数据安全问题成为了众多企业关心的主要话题。近日&#xff0c;云天数据恢…

C# Web控件与数据感应之 CheckBoxList 类

目录 关于数据感应 CheckBoxList 类 范例运行环境 数据源表设计 角色字典表 用户角色表 AutoValueDBList 方法 原理 设计 实现 调用示例 初始化数据 启动查询模式 使用保存模式 小结 关于数据感应 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;We…

11个2024年热门的AI编码助手

大家好&#xff0c;人工智能&#xff08;AI&#xff09;领域的大型语言模型&#xff08;LLMs&#xff09;已经逐渐发展成熟&#xff0c;并且深入到了我们日常的工作当中。在众多AI应用中&#xff0c;编码助手尤为突出&#xff0c;是开发人员编写更高效、准确无误代码的必备辅助…

C#创建obj三维模型文件

介绍 使用开源库创建obj三维模型文件。 开源库地址&#xff1a;https://github.com/JeremyAnsel/JeremyAnsel.Media.WavefrontObj 相关API地址&#xff1a;https://jeremyansel.github.io/JeremyAnsel.Media.WavefrontObj/api/JeremyAnsel.Media.WavefrontObj.ObjFile.html …

【文献阅读】 The ITS Irregular Terrain Model(Longely-Rice模型)海上电波传播模型

前言 因为最近在做海上通信的一个项目&#xff0c;所以需要对海上的信道进行建模&#xff0c;所以才阅读到了这一篇文献&#xff0c;下面的内容大部分是我的个人理解&#xff0c;如有错误&#xff0c;请见谅。欢迎在评论区和我一起讨论。 Longely-Rice模型介绍 频率介于 20 …

Redis协议与异步方式

Rredis Pipeline redis pipeline 是一个客户端提供的机制&#xff0c;而不是服务端提供的&#xff1b; pipeline 不具备事务性&#xff1b; 目的&#xff1a;节约网络传输时间&#xff1b; 通过一次发送多次请求命令&#xff0c;从而减少网络传输的时间。 Redis发布订阅 为了支…

文件传送协议

壹、文件传输协议FTP 一、FTP简介 文件传送协议FTP曾是互联网上使用最广泛的协议&#xff1b; 在互联网发展的早期阶段&#xff0c;用FTP传送文件约占整个互联网的通信量的三分之一&#xff1b;知道1995年&#xff0c;www的通信量才首次超过FTP。 FTP实现的是通过网络实现异…

删除链表中等于给定值 val 的所有结点(三种方法深入解析)

又见面啦&#xff0c;接下来的链表相关Oj题目我会根据我自己的理解来给大家讲解&#xff0c;包括解析和代码&#xff0c;希望你可以对链表有更加深入的理解&#xff01;&#xff01; 题目&#xff1a; 先上链接&#xff1a; OJ题目 给你一个链表的头节点 head 和一个整数 va…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

欧拉回路(leetcode 重新安排行程)

先学习一下欧拉回路是怎么一回事。 对于图中这七个节点&#xff0c;从节点1出发&#xff0c;最终要到达节点1&#xff0c;并且每条路只能走一次&#xff0c;且每条路都得走过一次。 使用dfs&#xff0c;如果算法按照字典序的排列方式选择下一个节点。 第一部分&#xff1a;那…

VS Code 保存+格式化代码

在 VSCode 中&#xff0c;使用 Ctrl S 快捷键直接保存并格式化代码&#xff1a; 打开 VSCode 的设置界面&#xff1a;File -> Preferences -> Settings在设置界面搜索框中输入“format on save”&#xff0c;勾选“Editor: Format On Save”选项&#xff0c;表示在保存…

CUDA内存访问模式

大多数设备端数据访问都是从全局内存开始的&#xff0c;并且多数GPU应用程序容易受内存带宽的限制。因此&#xff0c;最大限度的利用全局内存带宽是调控核函数性能的基本。 对齐与合并访问 如图&#xff0c;所有的应用程序数据最初存在于DRAM上&#xff0c;也就是物理设备内存上…

【HTTP上】协议/域名/url/请求和响应/状态码/重定向

文章目录 0.应用层协议0.1HTTP协议 1.域名2.DNS3.访问浏览器4.URL搜索特殊字符如#&~ 5.万维网6.http请求和响应的格式6.1HTTP请求格式6.2HTTP响应格式6.3示例6.3模拟HTTP【框架】6.4查看请求或响应的工具FiddlerPostman 7.网页7.0对访问网页的认识7.1wget7.2新的认识7.3GET…

使用DataGrip连接DM达梦数据库

目录 前言一、添加数据库驱动1.1 配置达梦驱动包1.1.1 配置达梦驱动1.1.2 配置驱动jar包 1.2 配置JDBC URL模板1.3 保存驱动配置 二、新建数据源2.1 填写数据库连接信息2.2 测试是否配置成功2.3 保存配置并退出 前言 达梦数据库虽然提供了官方的数据库管理工具"DM管理工具…

数据挖掘实战-基于CNN深度学习算法构建英文文本分类模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

零基础学习数据库SQL语句之操作表中数据的DML语句

我们的数据库是根据页面原型和相关需求完成相关开发的 在表中添加数据 删除数据 修改数据 添加数据 页面模型 当点击保存的时候就能将表单数据提交到服务端 服务端将数据添加到数据库 我们要用insert语句 将数据添加到数据库中 代码演示 CREATE DATABASE Dduo; USE Dduo…