目录

前言

一、栈的链式储存结构

二、栈的链式储存结构的操作

2.1   进栈操作

2.2   出栈操作

总结


前言

讲完了栈的顺序储存结构,我们现在来看看栈的链式存储结构,简称为链栈。

由于单链表中有头指针,而栈顶指针也是必不可少的。所以,我们将它们合二为一,即对于栈链来说是不需要头结点的。

需要注意的一点是,相比与栈的顺序储存结构,对于栈链来说,基本不存在栈满的情况。那是因为链式储存结构的特点就在于内存中的任何有空位的地方可以进行储存,除非内存已经没有可使用的空间了,那时计算机系统也将面临死机崩溃的情况了。


一、栈的链式储存结构

链栈的代码实现如下:

typedef struct stacknode{int data;       //暂定数据类型为int型 struct stacknode *next;}stacknode,*linkstackptr;typedef struct{linkstackptr top;     //栈顶的结点 int count;            //结点的数量
}linkstack;

但对于空栈来说,链表的原定义是头指针指向空,那么链栈的空其实就是top=NULL的时候。

二、栈的链式储存结构的操作

2.1   进栈操作

假设元素值为e的新结点是s,top为栈顶指针,代码如下:

status push(linkstack *a,int e)
{linkstackptr s=(linkstackptr)malloc(sizeof(stacknode));  //建立新结点 s.data=e;             s.next=a.top;         //把当前的栈顶元素赋值给新结点的直接后继 a.top=s;              //把新的结点赋值给栈顶指针 a.count++;            //栈内元素数量+1 return ok;
}

2.2   出栈操作

出栈操作同样是很简单的三步操作。假设变量p用来储存要删除的栈顶结点,将栈顶指针下移一位,最后释放p即可,实现代码如下:

status pop(linkstack *a,int *e)
{linkstackptr p;*e=a.top.data;p=a.top;             //将栈顶结点赋值给p a.top=a.top.next;    //使得栈顶结点下移一位,指向后一结点 free(p);             //释放结点p a.count--;     return ok;
}

总结

链栈的进栈和出栈的操作都很简单,没有任何的循环操作,时间复杂度均为O(1)。

对比一下顺序栈与链栈,它们在时间复杂度上是一样的,均为O(1)。所以,如果栈的使用过程中元素的变化不可预料,有时很小,有时非常大,那么最好是用链栈,反之,如果它的变化在可控范围内,建议使用顺序栈会更好一些。

数据结构与算法——栈的链式存储结构及实现相关推荐

  1. 栈的链式存储结构及实现

    今天学习栈的链式存储结构. 链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构. 栈的链式存储结构,简称为链栈.想想看,栈只是栈顶来 ...

  2. 3.3 栈的链式存储结构

    <?php header("content-type:text/html;charset=utf-8"); /*** 栈的链式存储结构的基本操作**包括* 1.初始化 __c ...

  3. 链式存储mysql_链栈:栈的链式存储结构

    前面讲完了栈的顺序存储结构,我们现在来看看栈的链式存储结构,简称为链栈. 链栈是没有附加头结点的运算受限的单链表.栈顶指针就是链表的头指针. 栈是用栈顶来做插入和删除操作,那么对于链栈的栈顶放在链表的 ...

  4. 关于栈的链式存储结构

    之前在创建栈的链式存储结构时,想当然误以为栈的top指针会指向链表的尾结点,在创建链表结构时的写法误写为: for(j=0;j<i;j++){         temp=(struct Node ...

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

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

  6. Python 数据结构 之 线性表 的链式存储结构

    用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明:  Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...

  7. 栈的链式存储结构(企业级链表)

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct StackNode{struct St ...

  8. 栈的链式存储结构(C语言实现)

    简要 链栈就是利用单链表作为栈的存储结构,单链表的第一个节点为栈顶,而最后一个节点为栈底,链栈既可以带头节点也可以不带头节点. 实现过程 实现代码 #include<iostream> # ...

  9. [数据结构与算法] : 栈的链式实现

    头文件 1 typedef int ElementType; 2 3 #ifndef _STACKLI_H_ 4 #define _STACKLI_H_ 5 6 struct Node; 7 type ...

最新文章

  1. Jboot 2.0.1 发布,新增基于 Fescar 的分布式事务支持
  2. python日期格式化
  3. Android人脸识别App(带web上传注册信息)
  4. Facebook 架构学习
  5. 谷歌吃苹果:新系统让Macbook秒变Chromebook
  6. Mysql快照读和当前读
  7. Java 8编写自定义收集器简介
  8. JAVA程序员面试题集合
  9. Spring、Spring MVC、MyBatis整合文件配置详解
  10. python 三分类的哑编码_python数据挖掘实战 -数据预处理篇(数据可视化-空值填充-哑变量编码)...
  11. postifx网络服务的搭建和配置
  12. python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享
  13. 严重BS骗样本的骗子
  14. 试分析家用变频空调的计算机控制原理,习 题 五
  15. Android陀螺仪传感器
  16. matlab冒号分号区别,matlab : 关于冒号 用法大全以及实例
  17. 千牛卖家工作平台使用教程
  18. COSMOS认证辅导,原材料生产到成品分销的各个环节预防和安全原则的约束
  19. 7段均衡器最佳参数_7段均衡器怎么调能达到最佳效果?
  20. 李威克挑战N小黑,虚拟人真实自然天花板之争的背后

热门文章

  1. mac怎么用oracle,MacOS下使用Oracle客户端
  2. sass-loader报错UnhandledPromiseRejectionWarning: TypeError: resolverFactory is not a function
  3. Git操作详解以及在VScode中的使用
  4. 《代码整洁之道 程序员的基本素养》内容表达与读后感
  5. 古诗欣赏:君王城上竖降旗,妾在深宫那得知?十四万人齐解甲,更无一个是男儿!
  6. Linux基础—” Linux静态动态库及相关编程“ 面试必问的知识点你了解了嘛
  7. vue中生成条形码,以及条形码的所有参数
  8. STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植
  9. MSP430第十七章:定时器A
  10. picgo-plugin-imageX火山引擎ImageX插件for picGo