C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
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语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)相关推荐
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 算法笔记--简单实现栈的先入后出(FILO,First In Last Out)功能
算法笔记–简单实现栈的先入后出(FILO,First In Last Out)功能 stack 栈,是一个 先入后出(FILO,First In Last Out)的 有序列表,可以形象地理解为手枪的 ...
- python 栈的压入弹出序列
| 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...
- [九度][何海涛] 栈的压入压出
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 数据结构与算法--举例分析法- 栈的压入弹出序列
举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- ❤️数据结构之栈(图文版详解)❤️
目录 一,写在前面 二,栈的定义 1,栈的定义 2,进栈出栈变化形式 三,栈的抽象数据类型 四,栈顺序存储结构及实现 1,栈的顺寻存储结构 2,栈的顺序存储结构--进栈操作 3,栈的顺序存储结构--出 ...
- 【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)
目录 引言: 1. 关于变量 1.1 什么是变量 1.2 变量的定义与声明 1.3 为什么要定义变量 1.4 变量定义的本质 2. 关键字 2.1 最宽宏大量的关键字 - auto 2.1.1 局部变 ...
- c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...
数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...
- c语言4 答案详解,2019考研数据结构C语言版详解答案(4)
<数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法,自从计算机专业课统考以后,专业课考试题型分为2类,一类选择题,一类综合应用题.本次新东方在线整理了数 ...
最新文章
- Cramer-Rao Lower Bound (CRLB) Simple Introduction
- tamper绕WAF小结
- C语言复习:指针知识
- 服务发现系统etcd介绍
- qq邮箱使用outlook 2007
- 基于redis实现的扣减库存
- ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
- python编码和解码_uu --- 对 uuencode 文件进行编码与解码 — Python 3.7.9 文档
- atitit。获取表格的字段注释metadata的原理以及AND 字段表格描述文档方案
- c语言jam的随机数,c – 如何重置随机数引擎?
- Python查找所有类似于123-45-67+89 = 100的组合
- 回调函数的原理及PHP实例
- redis为什么内存不宜过大
- SVN下载安装与使用
- Hive:用SQL对数据进行操作,导入数据、清洗脏数据、统计数据订单、优化结果输出等等
- k8s 中env小写环境变量未注入到容器中
- 推荐几款好用的 Git 图形化客户端
- golang的继承不是继承
- 一个关于高考的黑客故事:用2B铅笔注入阅卷系统
- 2.JAVAEE-电子商城-类目管理模块