链栈,即用链表实现栈存储结构。

链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶;链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如图 1 所示:

图 1 链栈示意图

将链表头部作为栈顶的一端,可以避免在实现数据 "入栈" 和 "出栈" 操作时做大量遍历链表的耗时操作。

链表的头部作为栈顶,意味着:

在实现数据"入栈"操作时,需要将数据从链表的头部插入;

在实现数据"出栈"操作时,需要删除链表头部的首元节点;

因此,链栈实际上就是一个只能采用头插法插入或删除数据的链表。

链栈元素入栈

例如,将元素 1、2、3、4 依次入栈,等价于将各元素采用头插法依次添加到链表中,每个数据元素的添加过程如图 2 所示:

图 2 链栈元素依次入栈过程示意图

C语言实现代码为:

//链表中的节点结构

typedef struct lineStack{

int data;

struct lineStack * next;

}lineStack;

//stack为当前的链栈,a表示入栈元素

lineStack* push(lineStack * stack,int a){

//创建存储新元素的节点

lineStack * line=(lineStack*)malloc(sizeof(lineStack));

line->data=a;

//新节点与头节点建立逻辑关系

line->next=stack;

//更新头指针的指向

stack=line;

return stack;

}

链栈元素出栈

例如,图 2e) 所示的链栈中,若要将元素 3 出栈,根据"先进后出"的原则,要先将元素 4 出栈,也就是从链表中摘除,然后元素 3 才能出栈,整个操作过程如图 3 所示:

图 3 链栈元素出栈示意图

因此,实现栈顶元素出链栈的 C 语言实现代码为:

//栈顶元素出链栈的实现函数

lineStack * pop(lineStack * stack){

if (stack) {

//声明一个新指针指向栈顶节点

lineStack * p=stack;

//更新头指针

stack=stack->next;

printf("出栈元素:%d ",p->data);

if (stack) {

printf("新栈顶元素:%d\n",stack->data);

}else{

printf("栈已空\n");

}

free(p);

}else{

printf("栈内没有元素");

return stack;

}

return stack;

}

代码中通过使用 if 判断语句,避免了用户执行"栈已空却还要数据出栈"错误操作。

总结

本节,通过采用头插法操作数据的单链表实现了链栈结构,这里给出链栈及基本操作的C语言完整代码:

#include

#include

typedef struct lineStack{

int data;

struct lineStack * next;

}lineStack;

lineStack* push(lineStack * stack,int a){

lineStack * line=(lineStack*)malloc(sizeof(lineStack));

line->data=a;

line->next=stack;

stack=line;

return stack;

}

lineStack * pop(lineStack * stack){

if (stack) {

lineStack * p=stack;

stack=stack->next;

printf("弹栈元素:%d ",p->data);

if (stack) {

printf("栈顶元素:%d\n",stack->data);

}else{

printf("栈已空\n");

}

free(p);

}else{

printf("栈内没有元素");

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;

}

程序运行结果为:

弹栈元素:4 栈顶元素:3

弹栈元素:3 栈顶元素:2

弹栈元素:2 栈顶元素:1

弹栈元素:1 栈已空

栈内没有元素

js进栈出栈_链栈及基本操作(包含入栈和出栈)详解相关推荐

  1. ★核心关注点_《信息系统项目管理师考试考点分析与真题详解》

    ★核心关注点_<信息系统项目管理师考试考点分析与真题详解> 真诚感谢你选用<信息系统项目管理师考试考点分析与真题详解>作为高级项管的辅导用书.对于使用该书的读者们,在备考201 ...

  2. 3.2_栈_链式存储结构(链表形式)

    [链式存储结构] 栈的链式存储结构,简称链栈. [具体实现] package com.Higgin.LinkStack;import java.util.EmptyStackException;/** ...

  3. 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解

    摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app.其同时解决了开发效率.发版速度以及用户体验三个核心问题.那么WEEX是如何实现的?目前WEE ...

  4. 【数据结构初阶】:栈和队列的实现(用C语言实现,附图详解和附源码)

    文章目录 栈的实现: 一.栈的概念和性质 二.栈的实现思路 三.栈的相关变量内存布局图 四.栈的初始化和销毁 五.栈的接口实现: 1.入栈 2.出栈 3.获取栈顶的数据 4.获取栈的元素个数 5.判断 ...

  5. c++定义一个动态全局变量_静态链接与动态链接的宏观概述及微观详解

    静态链接与动态链接的宏观概述及微观详解 第一部分 宏观概述 1. 静态链接 静态链接就是在程序运行前,链接器通过对象文件中包含的重定位表,完成所有重定位操作,并最终形成一个在运行时不需要再次进行依赖库 ...

  6. go使用grpc实现异步_(python、go)基于ETCD的gRPC分布式服务器实现详解

    作者:Zarten知乎专栏:框架工具篇详解知乎ID: Zarten简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 ! 1-概述 gRPC框架是一个 ...

  7. xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解

    对Xpath 获取子标签下所有文本的方法详解 在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string ...

  8. 简单跑酷java代码_如何实现一个简单的跑酷游戏?(代码详解)

    本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 采用的物理引擎是:Phaser.js 官网地址:http:// ...

  9. pythondifflib详解_用python标准库difflib比较两份文件的异同详解

    [需求背景] 有时候我们要对比两份配置文件是不是一样,或者比较两个文本是否异样,可以使用linux命令行工具diff a_file b_file,但是输出的结果读起来不是很友好.这时候使用python ...

最新文章

  1. PYTHON高级全栈开发工程师-老男孩教育
  2. UAVStack的慢SQL数据库监控功能及其实现
  3. Struts2中五个重要的常量
  4. js_调试_01_14 个你可能不知道的 JavaScript 调试技巧
  5. Linux RH5平台下使用Oracle ASM创建数据库
  6. MySQL基础篇(04):存储过程和视图,用法和特性详解
  7. jpype,jpython调用jar包中jdk的问题.
  8. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记30 ScrollView Demo实战
  9. erlang的dict和maps模块
  10. Openstack+Kubernetes+Docker微服务实践之路--基础设施
  11. C++算法学习(力扣:1544. 整理字符串)
  12. 传智播客 GIL(全局解释器锁)学习
  13. 兄弟9020cdn提示更换粉盒_兄弟打印机提示更换墨粉盒怎么办
  14. NovacoBridge 软件在电子海图更新中的应用
  15. 左耳朵耗子:疫情下的远程办公,聊聊我的经验和实践
  16. windows 禁用ipv6服务_win10系统电脑中禁用ipv6协议的修复方案
  17. Axure 9 简介【原型工具】
  18. MTBF平均故障间隔时间
  19. What are Triangulation, Trilateration, and Multilateration?
  20. php yii2.0框架下载,yii2.0下载|yii2.0(php框架) v2.0.10官方版 附安装教程 - 121下载站...

热门文章

  1. 在经济危机中萧瑟的光谷软件园
  2. 使用 HDFS 协议访问对象存储服务
  3. WAP(wml)开发教程
  4. 2022张宇考研基础30讲 第七讲 零点问题与微分不等式
  5. ubuntu12.04安装极点五笔
  6. manjaro安装boost库并测试,附带dssp安装教程
  7. Win10家庭版安装 VirtualBox
  8. LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
  9. 笔记本电脑如何开启关闭触摸板?
  10. 记一次Ubuntu完美迁移系统盘的折腾