C语言链栈(基本压栈,弹栈,取栈顶元素)

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>typedef struct StackNode {struct StackNode* next;int data;
}StackNode, *LinkStack;//链栈的初始化
void initStackNode(LinkStack* s) {*s = NULL;
}
//链栈的入栈
void push(LinkStack* s, int e) {StackNode* node = (StackNode*)malloc(sizeof(StackNode));node->data = e;node->next = *s;*s = node;
}//链栈的弹栈
void pop(LinkStack* s) {if (!(*s)){printf("链栈为空\n");return;}StackNode* p = *s;*s = (*s)->next;free(p);
}//取出栈顶元素(不弹栈)
void getPop(LinkStack* s, int* res) {if (!(*s)){printf("栈为空\n");return;}*res = (*s)->data;
}//遍历链栈
void show(LinkStack s) {if (!s){printf("栈为空\n");return;}StackNode* p = s;int i = 0;while (p){printf("链表中的第%d个元素是%d\n", i++, p->data);p = p->next;}
}void main() {LinkStack s;initStackNode(&s);show(s);printf("测试入栈\n");for (int i = 0; i < 10; i++){push(&s, i);}show(s);printf("测试弹栈\n");int res;while (s){getPop(&s, &res);printf("当前栈顶元素是%d\n", res);pop(&s);}pop(&s);
}

C语言链栈(基本压栈,弹栈,取栈顶元素)相关推荐

  1. 【剑指offer-Java版】22栈的压入弹出序列

    栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...

  2. python 栈的压入弹出序列

    | 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...

  3. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  4. 剑指offer-21.栈的压入弹出序列

    1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  5. 【C 语言】数组 ( 多维数组操作模型 | 取某个数组元素地址 | 取某个数组元素值 )

    文章目录 一.多维数组操作模型 1.取出某个数组元素地址 2.取出某个数组元素值 总结 一.多维数组操作模型 以 // 声明一个多维数组int array[2][3]; 二维数组为例 ; 1.取出某个 ...

  6. 大根堆的删除c语言,小根堆大根堆的动态创建与堆顶元素删除

    堆的介绍与调整 本文主要是实现动态的创建一个堆,并且动态地向堆中插入元素,以及删除堆顶元素. 堆的创建与删除操作分为大根堆与小根堆两种实现. 头文件 #include #include #includ ...

  7. 剑指Offer(Java实现)栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...

  8. 栈的压入序列和弹出序列是否匹配

    给两个数组pushed和poped,其中pushed为栈的压入序列,popped为栈的弹出序列,判断第一个序列是否是第一个序列的弹出序列.假设压入栈的所有数字均不相等. 分析:辅助栈判断. class ...

  9. 【C语言】二十二步了解函数栈帧(压栈、传参、返回、弹栈)

    阅读本文需要掌握的知识 熟练使用--c语言函数 进入正题前 首先我们为什么要学习函数的栈帧? 简单回答就是:增加内功 学习函数调用的底层代码,了解函数如何传参.如何返回 这样对于函数的使用有很大的帮助 ...

最新文章

  1. 初涉程序员之路的感悟
  2. RecSys 2017总结
  3. fft快速傅利叶变的C实现
  4. java在文本区输出方法_Java文件的几种读取、输出方式
  5. 腾讯安全Blade团队亮相CanSecWest峰会
  6. (转)mysql基础命令
  7. fpga板子怎么和电脑连_windows7台式电脑怎么连接路由器?台式win7电脑连路由器步骤...
  8. 刷题刷题 ——网易CPP
  9. stats | 介绍三个与数学规划函数
  10. Python—正则表达式基础详解及re库运用
  11. 重庆医科大学赵浏阳教授招收博士、招聘博士后
  12. Vue日历的编写,可显示周和月的模式(其中可以自定义日历里内容的显示)
  13. 微信公众号开发 入手
  14. 计算机基础- -认识内存
  15. 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言
  16. 美女硕士养猪记:如何用大数据激活一头猪
  17. 工地人员定位原理又是什么--新导智能
  18. Kinect动作捕捉的改进
  19. 劫持流量原理是什么?关于劫持流量的种类和产生
  20. 2022-2028全球与中国交通运输锂电池市场现状及未来发展趋势

热门文章

  1. ubuntu20.04 LTS 手把手安装教程
  2. 域名分级与域名解析过程(DNS)
  3. 第四章 GDI、控件------结束语
  4. 无线路由器硬件配置参数 NetGear篇
  5. 微信外部浏览器或短信链接唤起微信小程序的解决方案
  6. Tiled 地图编辑器之 tile坐标转换
  7. 【编程实践】第二章 C++面向对象编程《C++程序设计语言》 / By 禅与计算机程序设计艺术ChatGPT
  8. Android12之OpenSL ES衔接android侧播放器(十六)
  9. MYSQL用函数请三思
  10. 北京博睿宏远数据科技股份有限公司声明