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

大连python培训深圳知名网络优化公司

大连python培训,深圳知名网络优化公司,大型网站开发 广州,阜宁网站建设找哪家好1. 栈 栈是一种特殊的线性表,只允许在一端进行插入和删除元素操作。他的操作顺序是先进后出。 栈顶:进行插入和删除元素操作的一端。 栈顶:不进行任何操作。 压栈:栈的插入操作。 出栈:栈的删除操作。 2. 栈的模拟…

1. 栈

栈是一种特殊的线性表,只允许在一端进行插入和删除元素操作。他的操作顺序是先进后出

栈顶:进行插入和删除元素操作的一端。

栈顶:不进行任何操作。

压栈:栈的插入操作。

出栈:栈的删除操作。

2. 栈的模拟实现

栈可以使用顺序表来实现,也可以使用链表来实现。

2.1 用顺序表实现的栈

2.1.1 栈的接口

public class MyStack {public int[] elem;public int usedSize;//构造方法public MyStack() {}//入栈public void push(int val) {}//出栈public int pop() {}//获取栈顶元素,但不删除public int peek() {}//判满private boolean isFull() {}//判空public boolean isEmpty() {}
}

2.1.2 栈的成员变量

用数组来表示栈,usedSize来表示栈中元素个数。

public int[] elem;
public int usedSize;

2.1.3 栈的构造方法

在构造方法中我们先开劈10个int空间。

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

2.1.4 入栈

思路:

        1. 首先判断数组是否已满,已满进行扩容。

        2. 进行元素插入,再usedSize++;

    public void push(int val) {if(isFull()) {this.elem = Arrays.copyOf(elem,2*elem.length);}elem[usedSize++] = val;}

2.1.5 出栈

思路:

        1. 首先判断数组是否为空,为空异常。

        2. 再usedSize-- ,并返回usedSize下标的元素。 

public int pop() {if(isEmpty()) {throw new StackEmptyException();}usedSize--;return elem[usedSize];
}

2.1.6 获取栈顶元素,但不删除

思路:

        1. 判断判断数组是否为空,为空异常。

        2. 返回 usedSize-1下标的元素。

    public int peek() {if(isEmpty()) {throw new StackEmptyException();}return elem[usedSize-1];}

2.1.7 判满

判断数组 的长度是否等于usedSize。

    private boolean isFull() {return this.elem.length == usedSize;}

2.1.8 判空

判断usedSize是否等于零。

    public boolean isEmpty() {return usedSize == 0;}

2.2 用链表实现栈

由于栈的先入后出的特性,如果我们使用单向链表,那么要拿到最后节点,它的时间复杂度为O(n),所以使用双向链表。

2.2.1 栈的接口

public class MyStack {static class ListNode {public ListNode next;public ListNode prev;public int val;public ListNode(int val) {this.val = val;}}public ListNode first;public ListNode last;//入栈public void push(int val) {}//出栈public int pop() {}//获取栈顶元素,但不删除public int peek() {}//判空public boolean isEmpty() {}
}

2.2.2 内部类

和双向连表差不多。

    static class ListNode {public ListNode next;public ListNode prev;public int val;public ListNode(int val) {this.val = val;}}

2.2.3 入栈

思路:

        1. 判断栈是否为空,为空头结点,尾结点同时指向node结点。

        2. 否则就进行尾插。

    public void push(int val) {ListNode node = new ListNode(val);if(isEmpty()) {first = last = node;}last.next = node;node.prev = last;last = node;}

2.2.4 出栈

思路:

       1. 判断栈是否为空,为空直接抛异常。

       2. 否则把尾结点删除。

       3. 最后返回删除之前尾结点的数值。 

    public int pop() {if(isEmpty()) {throw new StackEmptyException();}int val = last.val;last.prev.next = null;last = last.prev;return val;}

2.2.5 获取栈顶元素,但不删除

思路:

        1. 判断栈是否为空,为空直接抛异常。

        2. 返回尾结点的数值。

    public int peek() {if(isEmpty()) {throw new StackEmptyException();}int val = last.val;return val;}

2.2.6 判空

判断头节点是否为空。

    public boolean isEmpty() {return first == null;}

3. JAVA中的栈

Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表。

实现了Serializable接口,可序列化

实现了Cloneable 接口,可克隆

实现了RandomAccess接口,可随机访问

3.1  栈的方法

     

http://www.dtcms.com/wzjs/34285.html

相关文章:

  • 网站建设修改教程视频手机清理优化软件排名
  • 潍坊哪里做网站网络营销的10个特点
  • 网站打开慢如何优化如何优化搜索引擎
  • 做视频网站用什么格式好金华百度seo
  • 外贸网站推广公司最大南京网站设计公司大全
  • 哪个网站可以做海报南京搜索引擎推广优化
  • 做一个网站开发要多少钱爱战网关键词挖掘
  • 做个浏览器多少钱惠州短视频seo
  • 阳江网络问政平台新闻发布会深圳关键词排名seo
  • 网站建设规划书道客巴巴郑州建网站的公司
  • 平面设计兼职怎么收费长沙正规竞价优化服务
  • 无锡本地做网站seo手机端排名软件
  • a站app优化搜索引擎营销
  • 天津自己制作网站长沙有实力seo优化公司
  • 网站死链接检查澎湃新闻
  • 西亚网站建设科技一键seo提交收录
  • 稿定设计官方免费下载网站建设公司seo关键词
  • 福田网站开发新媒体营销策略有哪些
  • 网站备案需要当面核验哪些信息大连头条热点新闻
  • 网站开发制作全包服务营销理论
  • 网站设计书搜索引擎排名查询工具
  • 天地做网站南平seo
  • jquery代码做的网站沈阳关键词seo
  • 洪梅网站建设抚顺seo
  • 国外做兼职网站免费发布推广的平台
  • 哪个网站有做阿里巴巴流量网站广告调词平台
  • 工信部网站域名备案查询系统线上营销推广渠道
  • 北京网站建设正邦网络营销学校
  • 网站开发的薪资是多少百度客服人工电话95188
  • 网站提升权重企业宣传推广方案