链栈的基本操作(入栈,出栈)
链栈,即用链表实现栈存储结构。
链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶;链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底。
将链表头部作为栈顶的一端,可以避免在实现数据 "入栈" 和 "出栈" 操作时做大量遍历链表的耗时操作。
链表的头部作为栈顶,意味着:
- 在实现数据"入栈"操作时,需要将数据从链表的头部插入;
- 在实现数据"出栈"操作时,需要删除链表头部的首元节点
因此,链栈实际上就是一个只能采用头插法插入或删除数据的链表。
代码如下:
#include "stdio.h"
#include "stdlib.h"typedef struct linestack{ //定义链式栈结构 int data; struct linestack *next;
}linestack; //用typedef将 struct linestack取代为linestack
linestack *push(linestack *stack,int a) //入栈操作
{linestack *line=(linestack*)malloc(sizeof(linestack)); //新建栈分配动态内存 line->data=a; //将数据域带入 line->next=stack; //将新的栈顶节点指向老节点 stack=line; //新栈顶为line return stack; //返回栈顶
}
linestack *pop(linestack *stack) //出栈操作
{if(stack) //如果栈顶不为空 {linestack *p=stack; //定义个指针节点代表栈顶 printf("弹栈元素为%d\t",p->data); //输出栈顶元素 stack=p->next; //将下个节点作为新栈顶 free(p); //释放掉p节点 老栈顶 if(stack) //如果新栈顶存在 {printf("新栈顶为%d\n",stack->data); //输出新栈顶的元素 }else{ printf("栈已空\n"); //否则输出栈空 } }else{printf("栈内没有元素\n"); //当一开始栈就没有元素时输出空栈 return stack;}return stack;
}
int main()
{linestack *stack=NULL; //定义栈顶为空 stack=push(stack,1); //入栈操作 stack=push(stack,2);stack=push(stack,3);stack=push(stack,4);stack=pop(stack); //出栈操作 stack=pop(stack);stack=pop(stack);stack=pop(stack);stack=pop(stack);return 0;
}
运行结果:
链栈的基本操作(入栈,出栈)相关推荐
- 大话数据结构第四章栈的基本概念与出栈入栈操作
一.栈的顺序存储结构 1.基本概念 栈顶就是表尾. 栈顶是栈插入和删除的地方. 栈就是只允许在表尾进行添加或删除,是顺序存储结构线性表的特例或者说简化. 为什么说是简化呢?相对于顺序存储结构来说栈只允 ...
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 在堆栈中,push为入栈操作,pop为出栈操作
LinkedList提供以下方法:(ArrayList无此类方法) addFirst(); removeFirst(); addLast(); removeLast(); 在堆栈中,push为入栈操作 ...
- 算法笔记--简单实现栈的先入后出(FILO,First In Last Out)功能
算法笔记–简单实现栈的先入后出(FILO,First In Last Out)功能 stack 栈,是一个 先入后出(FILO,First In Last Out)的 有序列表,可以形象地理解为手枪的 ...
- 1.栈的压栈(入栈、进栈)及出栈 2.顺序表及链表的缓存命中
一.栈的压栈(入栈.进栈)及出栈 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作.进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底.栈中的数据元素 ...
- Java之根据入栈顺序是否能得到出栈顺序
入栈.出栈顺序匹配 前言 一.Java入栈.出栈 1.例题 二.题解 A.纯正的模拟 B.LinkedHashSet C.利用CPU 总结 参考文献 前言 给出入栈顺序,匹配一个出栈顺序是否合法,即出 ...
- 已知入栈顺序求所有的出栈顺序已知出栈顺序求所有的入栈顺序
一.已知入栈顺序求所有的出栈顺序 已知入栈顺序是{1,2,3,4,5},求所有的出栈顺序? 我的思路: 既然入栈顺序固定,我觉得可以使用递归来做. 先定义一个函数,比如说叫做help. //伪代码 v ...
- 栈 - 关于出栈序列,判断合法的出栈序列
文章目录 1 引例 2 做题方法 3 原因 3.1 选项D(4 3 1 2)的模拟 1 引例 (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( ). A. 1 2 4 3 B. ...
- 数据结构实验之栈与队列七:出栈序列判定
Description 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次.输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序 ...
最新文章
- TensorFlow练习12: 判断男声女声
- Apache James使用的方法及相关心得(转)
- 《系统集成项目管理工程师》必背100个知识点-63供应商选择
- Linux中自动删除n天前日志
- java 静态类 静态方法_JAVA的静态变量、静态方法、静态类
- Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题
- Mysql错误1366的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
- RHEL 7.2 + Oracle 12cR2 + RAC
- vb用鼠标实现屏幕绘图
- Atitit it业界与软件界的定律 原则 准则 法则 效应
- Java递归算法实例
- python写入文件后换行_python写入文件自动换行问题的方法
- Apktool反编译
- 凸优化理论基础2——凸集和锥
- 大数据会议资料学习笔记201402
- springboot 配置日志文件
- 网站开发进阶(十一)如何将一个jsp页面嵌套在另一个页面中
- 网站优化与seo的方法(seo的优化基础)
- keil5 c语言运行
- 项立刚:FDD牌照发放 难改行业大格局