C语言实现链栈的创建、入栈、出栈、取栈顶、遍历…等基本操作

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//1.定义数据类型
typedef int ElemType;
//2.定义链栈结构体
typedef struct LinkStackNode
{ElemType data;//存数据struct LinkStackNode *next;//存下个节点的地址
} LinkStack;
//3.初始化链栈
int initLinkStack(LinkStack *L)
{L = (LinkStack *) malloc(sizeof(LinkStack));//申请内存if(!L->data) return 0;//申请失败L->data = 0;//初始化链栈头结点数据域L->next = NULL;//初始化链栈头结点指针域return 1;
}
//4.入栈
int push(LinkStack *L, ElemType e)
{LinkStack *n;//新节点n = (LinkStack *) malloc(sizeof(LinkStack));if(!n->data) return 0;n->data = e;//存入数据n->next = L->next;//链栈栈顶元素链入新节点,新节点变成栈顶L->next = n;//新节点链入链栈头结点末尾return 1;
}
//5.出栈
int pop(LinkStack *L, ElemType *e)
{if(!L->next) return 0;//栈空,返回0LinkStack *d = L->next;//出栈指针指向栈顶*e = d->data;//赋值L->next = d->next;//头结点跳过出栈节点,链入出栈节点的下一节点free(d);//释放内存return 1;
}
//6.取栈顶
int getTop(LinkStack *L, ElemType *e)
{if(!L->next) return 0;*e = L->next->data;return 1;
}
void printStack(LinkStack *L)
{LinkStack *p = L;//遍历指针while (p){p = p->next;printf("%d ", p->data);}printf("\n");
}
//7.演示
int main()
{LinkStack L;initLinkStack(&L);ElemType e;printf("入栈元素:");scanf("%d", &e);push(&L, e);getTop(&L, &e);printf("栈顶元素:%d\n",e);pop(&L, &e);printf("出栈元素:%d", e);printf("\n入栈元素(Ctrl + C结束):");while (scanf("%d", &e) != EOF){push(&L, e);printf("入栈元素(Ctrl + C结束):");}printf("\n遍历元素:");printStack(&L);return 0;
}

C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)相关推荐

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

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

  2. 算法笔记--简单实现栈的先入后出(FILO,First In Last Out)功能

    算法笔记–简单实现栈的先入后出(FILO,First In Last Out)功能 stack 栈,是一个 先入后出(FILO,First In Last Out)的 有序列表,可以形象地理解为手枪的 ...

  3. python 栈的压入弹出序列

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

  4. [九度][何海涛] 栈的压入压出

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

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

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

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

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

  7. ❤️数据结构之栈(图文版详解)❤️

    目录 一,写在前面 二,栈的定义 1,栈的定义 2,进栈出栈变化形式 三,栈的抽象数据类型 四,栈顺序存储结构及实现 1,栈的顺寻存储结构 2,栈的顺序存储结构--进栈操作 3,栈的顺序存储结构--出 ...

  8. 【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)

    目录 引言: 1. 关于变量 1.1 什么是变量 1.2 变量的定义与声明 1.3 为什么要定义变量 1.4 变量定义的本质 2. 关键字 2.1 最宽宏大量的关键字 - auto 2.1.1 局部变 ...

  9. c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...

    数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...

  10. c语言4 答案详解,2019考研数据结构C语言版详解答案(4)

    <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法,自从计算机专业课统考以后,专业课考试题型分为2类,一类选择题,一类综合应用题.本次新东方在线整理了数 ...

最新文章

  1. Cramer-Rao Lower Bound (CRLB) Simple Introduction
  2. tamper绕WAF小结
  3. C语言复习:指针知识
  4. 服务发现系统etcd介绍
  5. qq邮箱使用outlook 2007
  6. 基于redis实现的扣减库存
  7. ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
  8. python编码和解码_uu --- 对 uuencode 文件进行编码与解码 — Python 3.7.9 文档
  9. atitit。获取表格的字段注释metadata的原理以及AND 字段表格描述文档方案
  10. c语言jam的随机数,c – 如何重置随机数引擎?
  11. Python查找所有类似于123-45-67+89 = 100的组合
  12. 回调函数的原理及PHP实例
  13. redis为什么内存不宜过大
  14. SVN下载安装与使用
  15. Hive:用SQL对数据进行操作,导入数据、清洗脏数据、统计数据订单、优化结果输出等等
  16. k8s 中env小写环境变量未注入到容器中
  17. 推荐几款好用的 Git 图形化客户端
  18. golang的继承不是继承
  19. 一个关于高考的黑客故事:用2B铅笔注入阅卷系统
  20. 2.JAVAEE-电子商城-类目管理模块

热门文章

  1. 金田变频器说明书_金田BH386系列变频器使用手册.pdf
  2. 毕业生登记表特长填写计算机,大学生毕业登记表中有何特长该怎么填啊。
  3. Java实现微信H5支付
  4. 会议会展产业要善用信息技术提高活动运营管理效率
  5. Vue项目:电商后台管理管理系统
  6. 单职业传奇私脱机辅助制作视频教程
  7. java调用百度语音接口
  8. mpush环境部署测试问题:安卓APP闪退
  9. 微信小程序轮播图高度自适应
  10. 联想Thinkpad T580 20L9 20LA Wistron LTS-2 17812-1笔记本点位图