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

淘宝api 做网站/代写平台在哪找

淘宝api 做网站,代写平台在哪找,买购网,阿里云网站建设有什么好处如何理解栈这种数据结构?关于栈,我们生活中有非常多的例子,比如手枪弹夹中的子弹,往弹夹中一颗一颗从下往上压子弹,相当于入栈;而发射子弹只能从上面往下一颗一颗弹出子弹,相当于出栈。我们不能…

53019df57b7b323ac6f463e64be2d1d6.png

如何理解栈这种数据结构?

关于栈,我们生活中有非常多的例子,比如手枪弹夹中的子弹,往弹夹中一颗一颗从下往上压子弹,相当于入栈;而发射子弹只能从上面往下一颗一颗弹出子弹,相当于出栈。我们不能通过任何手段发射弹夹中间的子弹。先进着后出,后进着先出,这种结构就是典型的栈。

从上面的例子不难看出,栈是一种受限制的线性表,只允许在栈的顶端进行出栈和入栈操作。

为什么会出现栈这种数据结构?

我们前面学习过数组和链表,它们和栈一样都是线性表结构,而且没有栈在删除和添加时的操作限制。我们直接用数组和链表去代替栈是否可行?

答案是否定的,数组和链表可以在数据结构上代替栈,但是在一些需要使用到先进着后出,后进着先出业务场景的时候,数组和链表暴露了太多的接口去操作数据,可能会使数据不可控制。

当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选栈这种数据结构。

如何实现一个栈?

从栈的定义,我们不难看出栈有两种实现方式,分别是数组和链表。数组实现的栈是顺序栈,链表实现的栈是链式栈。

顺序栈(数组实现)5a6248719eab539b6cda4d7ca48f5a7b.png

public class ArrayStack {

private int[] arr;//数组

private int count;//元素个数

private int size;//栈的大小

private final static int DEFAULT_SIZE=16; //默认容量

public ArrayStack(int size) {

this.arr=new int[size];

this.count=0;

this.size=size;

}

public ArrayStack() {

this.arr=new int[DEFAULT_SIZE];

this.count=0;

this.size=DEFAULT_SIZE;

}

/**

* 入栈

* @param a

*/

public void push(int a){

if (count==size){//如果栈满了,则申请一个2倍容量大小的数组,实现动态扩容

arr = Arrays.copyOf(arr, arr.length * 2);

}

arr[count]=a;

count++;

}

/**

* 出栈,将栈顶元素删除,并返回该元素

* @return 栈顶元素

*/

public int pop(){

if (count==0){//如果栈中元素为空

return -1;

}

int result=arr[count-1];

count--;

return result;

}

}

链式栈(链表实现)

/**

* 链式栈

*/

public class LinkedStack {

/**

* 定义一个链表

*/

private class Node{

private T data;

private Node next;

public Node() {

}

public Node(T data, Node next) {

this.data = data;

this.next = next;

}

}

private Node topNode;//记录栈顶元素

private int size;//栈的大小

public LinkedStack() {

this.topNode = null;

this.size=0;

}

/**

* 入栈

* @param element

*/

public void push(T element){

topNode = new Node(element, topNode);//让新加入的节点指向老的节点

size++;

}

/**

* 移除栈顶元素并返回

* @return

*/

public T pop(){

Node oldTop=topNode;

topNode= topNode.next;

oldTop.next=null;

size--;

return oldTop.data;

}

}

5a6248719eab539b6cda4d7ca48f5a7b.png

链式栈(链表实现)

8b22ab26ef493287a87a82da4f4b89c6.png

/**

* 链式栈

*/

public class LinkedStack {

/**

* 定义一个链表

*/

private class Node{

private T data;

private Node next;

public Node() {

}

public Node(T data, Node next) {

this.data = data;

this.next = next;

}

}

private Node topNode;//记录栈顶元素

private int size;//栈的大小

public LinkedStack() {

this.topNode = null;

this.size=0;

}

/**

* 入栈

* @param element

*/

public void push(T element){

topNode = new Node(element, topNode);//让新加入的节点指向老的节点

size++;

}

/**

* 移除栈顶元素并返回

* @return

*/

public T pop(){

Node oldTop=topNode;

topNode= topNode.next;

oldTop.next=null;

size--;

return oldTop.data;

}

}8b22ab26ef493287a87a82da4f4b89c6.png

leetcode上关于栈的练习题:20,155,232,844,224,682,496.

本文是关于数据结构的栈,希望大家可以和我一起学习成长,早日找到自己想要的生活。

我是方褚,一个努力成长的程序员。

希望可以多多转发、收藏、关注!!

http://www.jmfq.cn/news/4807225.html

相关文章:

  • 做网站和优化共多少钱/网络营销顾问工作内容
  • 南宁怎么做网站/从哪里找网络推广公司
  • 深圳建设网站公/可口可乐网络营销策划方案
  • 网站的倒计时怎么做/网站推荐
  • 做网站优化好的网络公司/百度提问登录入口
  • 一级a做爰视频安全网站/谷歌推广优化
  • 中国做网站知名的公司/免费数据统计网站
  • 静态网站转成动态网站/长尾关键词挖掘精灵官网
  • 做算法题的网站/优化方案的格式及范文
  • 济南商城网站建设公司/惠州网络营销公司
  • 怎样进行网站建设/营销模式有哪些 新型
  • 教育行业网站开发/网络营销运营方案
  • 河北企业建网站/2024年阳性什么症状
  • 服务器怎样做网站呢/长沙网站seo分析
  • 江阴招聘网站建设学徒/浏览器老是出现站长工具
  • wordpress默认登录界面/seo营销方法
  • 自助建站编辑器/网站优化效果
  • 网站开发需要提供哪些东西/厦门关键词优化报价
  • 企业专业网站建设/网络营销成功的案例
  • 毕业设计代做网站web/石家庄热搜
  • 村建站属于哪个部门/比较好的品牌策划公司有哪些
  • 网站建设设计服务/微信营销是什么
  • 站长之家特效网站/河南it渠道网
  • 抓取的网站如何做seo/百度客服中心
  • 简单的网站设计/怎么申请网址
  • 最近三天国内重大新闻/刷百度关键词排名优化
  • 智慧团建信息系统网站/株洲发布最新通告
  • 天津手机网站建站培训/网络营销主要学什么
  • 乐陵疫情最新消息/seo职位招聘
  • 南阳微网站制作/抖音广告投放平台官网