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

微信官方版官方网站wordpress 中文附件

微信官方版官方网站,wordpress 中文附件,手机网页开发框架,宁波建设集团股份有限公司官网文章目录 栈(Stack)一、 栈的概念1.栈的方法2.源码分析 二、MyStack的实现1.MyStack的成员变量2.push方法3.isEmpty方法和pop方法4.peek方法 三、栈的应用1.将递归转化为循环1.调用递归打印2.通过栈逆序打印链表 栈(Stack) 一、 栈…

文章目录

  • 栈(Stack)
    • 一、 栈的概念
      • 1.栈的方法
      • 2.源码分析
    • 二、MyStack的实现
      • 1.MyStack的成员变量
      • 2.push方法
      • 3.isEmpty方法和pop方法
      • 4.peek方法
    • 三、栈的应用
      • 1.将递归转化为循环
        • 1.调用递归打印
        • 2.通过栈逆序打印链表


栈(Stack)


一、 栈的概念

  • 栈:先进后出,后进先出
  • 在这里插入图片描述

1.栈的方法

  • push 压栈,栈的插入操作,插入栈顶
  • pop 出栈,栈的删除操作,从栈顶删除
  • peek 查看栈顶的元素,不进行改变
  • size 查看栈的大小
  • isEmpty 判断栈是否为空
 public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(1);//压栈,存进数据stack.push(2);stack.push(3);Integer pop = stack.pop();//出站System.out.println(pop);//取出3Integer peek = stack.peek();//查看栈顶的元素System.out.println(peek);//2Integer peek1 = stack.peek();System.out.println(peek);System.out.println(stack.size());//2boolean empty = stack.isEmpty();System.out.println(empty);//false}

2.源码分析

在这里插入图片描述

虽然栈自身的方法少,但是继承了Vector,可以调用Vector里面的方法
Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的

在这里插入图片描述

栈的底层由数组组成,因为栈继承自Vector,Vector的底层是一个数组
所以也叫顺序栈

二、MyStack的实现

1.MyStack的成员变量

public class MyStack {public int[] elem;public int userSize;public MyStack() {this.elem = new int[10];}

定义存储数据的elem数组
定义数组的使用大小
通过构造器,创建数组的大小

2.push方法

    public void push(int val) {//压栈if (isFull()) {//判断是否满了elem = Arrays.copyOf(elem, elem.length * 2);//扩容}elem[userSize++] = val;//后置++,}public boolean isFull() {return userSize == elem.length;}

1.要插入元素,先通过isFull方法判断数组是否满了
2.如果满了进行2倍的扩容
3.val值存进userSize索引的数组内
4.userSize++是后置的++,在存入到elem[userSize]位置后,userSize加一

3.isEmpty方法和pop方法

 public int pop() {//出栈if (isEmpty()){throw new EmptyException("栈是空的");}/* int val = elem[userSize-1];userSize--;return val;*//*   userSize--;return elem[userSize];*/return elem[--userSize];//前置-- 先--再返回下标的值}public boolean isEmpty() {return userSize == 0;}

1.先写isEmpty方法,如果userSize等于0,证明栈为空
2.在pop方法,调用isEmpty方法,如果为空,抛出异常
3.返回userSize减1后,数组中下标的值(注意前置–)

4.peek方法

    public int peek(){if (isEmpty()){throw new EmptyException("栈是空的");}return elem[userSize-1];}

先判断是否为空,不为空,返回userSize-1处数组的值

三、栈的应用

1.将递归转化为循环

逆序打印链表

1.调用递归打印
  public void disPlay2(ListNode pHead) {if (pHead == null) {return;}if (pHead.next==null){System.out.print(pHead.val+" ");return;}disPlay2(pHead.next);System.out.println(pHead.val+" ");}

直到头结点的下一个结点为空时,打印头结点的值,否则移动头结点,再次执行
将最后的结点打印完后,返回到上一步打印,依次完成逆序打印

2.通过栈逆序打印链表
 public void disPlay3(){Stack<ListNode> stack = new Stack<>();ListNode cur = head;while (cur!=null){//遍历链表,压栈stack.push(cur);cur = cur.next;}//遍历栈while (!stack.isEmpty()){ListNode pop = stack.pop();System.out.println(pop.val);//依次出栈打印取出的pop的值}System.out.println();}

1.先遍历链表,依次压栈
2.遍历栈,当栈不为空的时候,依次取出栈,打印取出结点的val值
3.完成逆序打印

点击移步博客主页,欢迎光临~

偷cyk的图

http://www.yayakq.cn/news/558849/

相关文章:

  • 项目网站开发js放的位置网站建设 教学大纲
  • 网站建设在商标第几类网站建设内页
  • 广州手机网站开发报价重庆传媒公司前十名
  • php网站开发设计系统泰州东方医院男科
  • 荆门住房建设厅网站重庆铜梁网站建设报价
  • 怎么做阿里巴巴英文网站公众号制作模板app
  • 防疫网站网页设计付费网站搭建
  • 注册一个做网站的公司好海南网站建设推广
  • 怎么在工商局网站查公司必应搜索引擎怎么样
  • 南沙区建设局网站扁平化的网站有哪些
  • 佛山做网站推广的公司阿里云WordPress一键安装
  • 网站建设明细建设品牌公司网站
  • 兴化网站建设价格全球搜索引擎排名2022
  • 做蛋糕视频的网站中小企业网站建设与推广分析
  • 濮阳做网站的电话理论网
  • seo怎么优化软件seo关键词排名优化销售
  • 网站建设的五大原则手机微信小程序免费制作平台
  • 固阳网站建设广告公司简介模板及介绍
  • 网站推广优化排名公司设计师服务平台破解
  • 芦苞网站建设淘宝怎么优化关键词排名
  • 西安网站建设需要多少钱企业高端网站
  • 云凡济南网站建设开发厚街网站建设多少钱
  • 网站建设与推广协议书东莞市住房和城乡建设局门户网站
  • 兰州市建设工程招标投标中心网站海外网站服务器下载
  • 青海制作网站国家企业信用信息公示系统(广东)
  • 网站制作公司网站计算机网络实验 做网站的
  • 佛山手机建网站qq网页版 入口
  • 哪里有做ppt模板下载网站查网站关键词工具
  • 计算机网站建设方向5a景区网站建设
  • 泗阳住房建设局网站手机怎么制作游戏软件教程