当前位置: 首页 > news >正文

深入理解数据结构(1)—用链表实现栈

栈是一种数据结构,链表也是一种数据结构。它们都是由基础的语法实现的。

如果一个数据结构可以用另外的数据结构来实现,那么可以有力的证明——“数据结构是一种思想”,是一种讲语法组合起来实现某种功能的手段

一、栈的特点——要实现哪些功能?

既然要用链表来模拟栈,那么要实现哪些功能?

  1. 栈是一种特殊的线性表,只允许在固定一端进行插入和删除元素操作
  2. 后进先出

那么对于这两个特性,我们可以做出如下设想:

在使用单链表的情况下,从头部插入——模拟入栈,头部删除——模拟出栈。同时这样操作满足了时间复杂度O(1)

每次向栈中插入一个元素,就是向这个链表前端插入一个新的“head”;

每次从栈中弹出一个元素,就是从链表头部删除一个“head”,然后“head = head.next”;

二、代码实现 

public class MyStack {/*创建链表的节点*/static class Node{public int val;public Node next;public Node(int val){this.val = val;}}public Node head;public int size;//实现入栈方法public void push(int val){Node node = new Node(val);/*如果此时链表中没有节点,那么将node设为head,并将有效元素个数size加1* 如果链表中已经有元素的话,将node节点头插到head节点前,并设为head*/if (size == 0){head = node;}else {node.next = head;head = node;}size++;}//实现出栈方法/*返回当前头节点的值,并将头节点后移*/public int pop(){int h = head.val;head = head.next;size--;return h;}//获取栈顶元素的peek方法public int peek(){return head.val;}//判断栈是否为空public boolean empty(){return size == 0;}public static void main(String[] args) {MyStack stack = new MyStack();stack.push(12);stack.push(24);stack.push(26);stack.push(58);int b = stack.pop();int a = stack.peek();System.out.println(b);System.out.println(a);}
}

 

http://www.lryc.cn/news/214295.html

相关文章:

  • Jtti:debian安装firewalld错误怎么办
  • 如何理解python中的*args和**kwargs
  • 软考之软件工程基础理论知识
  • 香港服务器不稳定的几种情况
  • 报修软件有什么用?企业如何做好设备管理与维护?
  • Go语言的键盘输入和打印输出
  • jenkins实践篇(2)—— 自动打tag的可回滚发布模式
  • golang worker channel 模式
  • 舔狗日记之好一条舔狗
  • 【地理位置识别】IP归属地应用的特点
  • 华为实验基础(2):路由器基础
  • 婚姻管理系统-使用bbst数据结构
  • 软件架构的概念
  • kubernetes存储-secrets
  • Springboot使用EasyExcel导入导出Excel文件
  • Pytorch L1,L2正则化
  • 【Elasticsearch 未授权访问漏洞复现】
  • pytorch笔记:PackedSequence对象送入RNN
  • C#WPF工具提示(ToolTip)实例
  • 智慧矿山系统中的猴车安全监测与识别
  • 网络协议--TCP连接的建立与终止
  • react条件渲染
  • Docker中Failed to initialize NVML: Unknown Error
  • 学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!
  • ttkefu在线客服在客户联络领域的价值
  • 创新方案|2023如何用5种新形式重塑疫后实体门店体验
  • Aqua Data Studio 2023.1
  • 【C++智能指针】
  • gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)
  • OSPF复习(2)