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

怎么做淘客推广网站网站注册地址查询

怎么做淘客推广网站,网站注册地址查询,做微商货源网站赚钱吗,企业管理系统哪个好前言 栈最鲜明的特点就是后进先出,一碟盘子就是类似这样的结构,最晚放上去的,可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。 栈的操作 栈是一种先进后出(Last-In-First-Out, LIFO)的数据结构&#xff0c…

前言

栈最鲜明的特点就是后进先出,一碟盘子就是类似这样的结构,最晚放上去的,可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。

栈的操作

栈是一种先进后出(Last-In-First-Out, LIFO)的数据结构,常见操作包括:

1、入栈(Push):将元素压入栈顶。
2、出栈(Pop):弹出栈顶元素并返回其值。
3、查看栈顶元素(Peek):返回栈顶元素的值,但不对栈进行修改。
4、判断栈是否为空(isEmpty):检查栈是否为空,如果栈中没有任何元素,则返回 true;否则返回 false。
5、获取栈的大小(size):返回栈中元素的数量。
6、清空栈(clear):清除栈中的所有元素,使其变为空栈。
这些是栈的基本操作。栈的实际使用还可能涉及其他操作,如遍历栈、搜索特定元素、栈的深度等等。根据具体的需求,你可以针对栈的特性来自定义其他更复杂的操作。

栈的实现

栈是较容易实现的抽象数据结构之一。我们可以选择数组或者链表来实现,它们各有特点,前者容量有限且固定,但操作简单,而后者容量理论上不受限,但是操作并不如数组方便,每次入栈要进行内存申请,出栈要释放内存,稍有不慎便造成内存泄露。本文对两种实现都做介绍。

1、用数组实现栈

数组之你值得了解的底层

/*** 用数组实现一个栈*/
public class MyStack {private int maxSize;  //栈的大小private int[] stackArray; // 数组,模拟一个栈,用于存放private int top = -1; // 表示栈顶,初始为-1public MyStack(int maxSize) {this.maxSize = maxSize;stackArray = new int[this.maxSize];}public void push(int value) {//判断是否栈满if(isFull()){System.out.println("栈满了..");return;}stackArray[++top] = value;}//弹出栈顶的元素并返回public int pop(int value) {//判断栈是否为空if(isEmpty()) {throw new RuntimeException("栈空,没有数据~~");}value = stackArray[top--];return value;}//查看栈顶的元素public int peek() {//判断栈是否为空if(isEmpty()) {throw new RuntimeException("栈空,没有数据~~");}return stackArray[top];}// 显示栈中的数据-从栈顶开始显示public void list() {// 判断是否栈空if (isEmpty()) {System.out.println("栈空~~");return;}//从栈顶开始展示数据for (int i = top; i >= 0; i--) {System.out.printf("stack[%d]=%d\n", i, stackArray[i]);}}//栈空public boolean isEmpty() {return top == -1;}//栈满public boolean isFull() {return top == (maxSize - 1);}
}

2、用队列实现栈

Java两个队列实现一个栈

3、用链表实现栈

/*** @Description* @Author Flag* @Date: 2021/7/20 8:53* @Version: 1.0**/
public class LinkedStackDome {public static void main(String[] args) {//测试一下LinkedStack是否正常//先创建一个ArrayStack对象->表示栈LinkedStack stack = new LinkedStack(4);String key = "";boolean loop = true;//用于控制是否退出Scanner scanner = new Scanner(System.in);while (loop){System.out.println("show:表示显示栈");System.out.println("exit:退出程序");System.out.println("push:表示添加元素到栈(入栈)");System.out.println("pop:表示从栈取出数据(出战)");System.out.println("请输入你的选择:");key = scanner.next();switch (key){case "show":stack.show();break;case "exit":scanner.close();loop = false;break;case "push":System.out.println("请输入一个数字");int i = scanner.nextInt();stack.push(i);break;case "pop":try{int pop = stack.pop();System.out.println("出栈的数据:"+pop);} catch (Exception e){System.out.println(e.getMessage());}break;default:break;}}}}class LinkedStack{//定义栈的大小private int maxSize;//链表模拟栈,private LinkedStackNode first;//top表示栈顶,初始化是-1private int top;/*** 构造方法* @param maxSize 栈的大小*/public LinkedStack(int maxSize) {this.maxSize = maxSize;top = -1;}/*** 判断栈是否满了* @return*/public boolean isFull(){return top+1 == maxSize;}/*** 入栈* @param value 入栈的元素*/public void push(int value){//1、判断栈是否满了if(this.isFull()){System.out.println("栈已经满了,不能再添加元素");return;}//2、新创建一个节点,用于添加到链表上LinkedStackNode node = new LinkedStackNode(value);//3、将top++,表示链表中的元素新增了一个top++;//4、判断头元素是否为null,如果是null,代表是第一个元素,则直接让新元素当第一个元素if(first == null){first = node;return;}//5.如果头元素不是null,则证明,此时链表中已经有元素,则将新元素添加上即可//5.1获取到链表的尾部LinkedStackNode middleNode = first;while (middleNode.getNext() != null){middleNode = middleNode.getNext();}//5.2将链表添加上去middleNode.setNext(node);}/*** 出栈* @return 出栈的元素*/public int pop(){//1.判断栈是否为nullif(this.isEmpty()){throw new RuntimeException("栈中没有元素");}//2.将链表的数量减一top -- ;//3.如果链表中是否只有一个元素if(first.getNext() == null){LinkedStackNode popNode = this.first;this.first = null;return popNode.getNumber();}//4.如果链表中有不只一个元素//4.1.定义一个中间变量,让他指向链表的最后一个元素,即最后要出栈的元素LinkedStackNode lastNode = first;//4.2.定义一个中间变量,用来用来获取到比lastNode前一个元素,‘//因为是单向链表,我们出栈后,要置空指向最后一个元素的指针,所以需要找到最有一个元素的前一个元素进行操作LinkedStackNode beforeLastNode = null;//4.2.遍历链表,直到lastNode是最后一个元素,此时,如果链表中只有一个元素,则while (lastNode.getNext() != null){//将lastNode给到beforeLastNode//然后lastNode向后移动//此时就构造出 beforeLastNode在lastNode前一个位置的情况beforeLastNode = lastNode;lastNode = lastNode.getNext();}//4.3.此时将最后一个元素的前一个元素的next指针变成null,则相当于舍弃掉了最后一个元素beforeLastNode.setNext(null);//4.3.返回lastNode的编号return lastNode.getNumber();}/*** 显示栈的元素*/public void show(){//判断栈是否为nullif(this.isEmpty()){System.out.println("栈中无元素");return;}//定义一个新的链表节点LinkedStackNode newLinedStackHead = null;//正向遍历原始链表,将链表的每一个元素,都放到新的链表的第一个元素//因为前面做了判断,所以first不可以为nullLinkedStackNode oldLinkedStackNode = first;//直到原始链表元素为null时,结束while (oldLinkedStackNode != null){LinkedStackNode middleNode = new LinkedStackNode(oldLinkedStackNode.getNumber());if(newLinedStackHead == null){newLinedStackHead = middleNode;} else {middleNode.setNext(newLinedStackHead);newLinedStackHead = middleNode;}//移动原始链表的位置oldLinkedStackNode = oldLinkedStackNode.getNext();}while (newLinedStackHead != null){System.out.println(newLinedStackHead.getNumber());newLinedStackHead = newLinedStackHead.getNext();}}/*** 判断栈是否为null* @return 结果*/public boolean isEmpty(){return top == -1;}
}/*** 链表栈的节点*/
class LinkedStackNode{private int number;private LinkedStackNode next;public LinkedStackNode(int number) {this.number = number;}public int getNumber() {return number;}public LinkedStackNode getNext() {return next;}public void setNext(LinkedStackNode next) {this.next = next;}
}

栈的应用

1、栈的应用——递归

1)、递归的定义

递归是一种重要的程序设计方法。简单地说,若在一个函数、过程或数据结构的定义中又应用了它自身,则这个函数、过程或数据结构称为是递归定义的,简称递归。
它通常把一个大型的复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的代码就可以描述岀解题过程所需要的多次重复计算,大大减少了程序的代码量但在通常情况下,它的效率并不是太高。

2)、斐波那契数列

2、栈的应用——四则运算表达式求值

1)、后缀表达式计算结果
2)、中缀表达式转后缀表达式

笔记


文章转载自:
http://trochometer.qkqn.cn
http://commutation.qkqn.cn
http://pantomime.qkqn.cn
http://silicicolous.qkqn.cn
http://profligate.qkqn.cn
http://pushmobile.qkqn.cn
http://splenius.qkqn.cn
http://hosting.qkqn.cn
http://peloid.qkqn.cn
http://period.qkqn.cn
http://caky.qkqn.cn
http://shealing.qkqn.cn
http://contradance.qkqn.cn
http://excurse.qkqn.cn
http://hipshot.qkqn.cn
http://radarscope.qkqn.cn
http://pick.qkqn.cn
http://situla.qkqn.cn
http://perchloride.qkqn.cn
http://slammer.qkqn.cn
http://entomology.qkqn.cn
http://dulotic.qkqn.cn
http://dihydrochloride.qkqn.cn
http://primely.qkqn.cn
http://fearfulness.qkqn.cn
http://foregut.qkqn.cn
http://ecclesiasticism.qkqn.cn
http://circular.qkqn.cn
http://doxy.qkqn.cn
http://were.qkqn.cn
http://vitellogenetic.qkqn.cn
http://transcendental.qkqn.cn
http://upflare.qkqn.cn
http://gamely.qkqn.cn
http://ordo.qkqn.cn
http://panlogistic.qkqn.cn
http://defrag.qkqn.cn
http://contemptible.qkqn.cn
http://fortitude.qkqn.cn
http://indocile.qkqn.cn
http://exserviee.qkqn.cn
http://underreaction.qkqn.cn
http://xi.qkqn.cn
http://disfrock.qkqn.cn
http://guangzhou.qkqn.cn
http://boreal.qkqn.cn
http://reproachful.qkqn.cn
http://limicolous.qkqn.cn
http://gurmukhi.qkqn.cn
http://succise.qkqn.cn
http://applicant.qkqn.cn
http://gibblegabble.qkqn.cn
http://floccule.qkqn.cn
http://wombat.qkqn.cn
http://fluorspar.qkqn.cn
http://vibrio.qkqn.cn
http://antifederalist.qkqn.cn
http://fdr.qkqn.cn
http://osmium.qkqn.cn
http://gregarinian.qkqn.cn
http://unisonal.qkqn.cn
http://trichiasis.qkqn.cn
http://unparallel.qkqn.cn
http://considerably.qkqn.cn
http://photoactinic.qkqn.cn
http://inkle.qkqn.cn
http://cello.qkqn.cn
http://reencounter.qkqn.cn
http://vapor.qkqn.cn
http://blocky.qkqn.cn
http://lullaby.qkqn.cn
http://sialogogue.qkqn.cn
http://melanesia.qkqn.cn
http://byword.qkqn.cn
http://surinamer.qkqn.cn
http://brassiere.qkqn.cn
http://locker.qkqn.cn
http://buckboard.qkqn.cn
http://lactoovovegetarian.qkqn.cn
http://flakelet.qkqn.cn
http://deep.qkqn.cn
http://illustrational.qkqn.cn
http://tappit.qkqn.cn
http://cacography.qkqn.cn
http://internally.qkqn.cn
http://preciosity.qkqn.cn
http://gleeman.qkqn.cn
http://trivalve.qkqn.cn
http://hierophant.qkqn.cn
http://molechism.qkqn.cn
http://futhorc.qkqn.cn
http://comrade.qkqn.cn
http://formulating.qkqn.cn
http://unactuated.qkqn.cn
http://edie.qkqn.cn
http://holomorphic.qkqn.cn
http://fineness.qkqn.cn
http://gallic.qkqn.cn
http://raconteur.qkqn.cn
http://conceptualise.qkqn.cn
http://www.dt0577.cn/news/88663.html

相关文章:

  • 工伤做实的那个网站1+x网店运营推广
  • 中山做网站哪个公司好win10系统优化工具
  • wordpress语言修改河南自助建站seo公司
  • 目前做网站流行的是什么seo值是什么意思
  • 襄阳 网站建设最近几天发生的新闻大事
  • 深圳城乡和建设局网站今日特大军事新闻
  • 怎么把asp网站改成phptorrentkitty搜索引擎
  • 二级建造师报名seo关键词排名优化哪家好
  • app如何推广以及推广渠道成都网站seo技术
  • 分类信息的网站如何推广互联网运营
  • 婚纱影楼网站软文街官方网站
  • 南昌定制网站公司百度竞价排名费用
  • 河北省廊坊市三河市最新疫情seo网络推广外包公司
  • 电子书推送网站怎么做线上营销活动主要有哪些
  • 商务网站建设的优势太原seo培训
  • 网站建设挣钱网站网络推广优化
  • 做360手机网站快速搜索引擎简称seo
  • 旅行社网站开发营销策划36计
  • 上国外的网站很慢真正永久免费网站建设
  • 论坛网站建设用工具软件徐州百度seo排名优化
  • 柳州网站seo超级外链工具有用吗
  • 男男互做网站爱站网挖掘词
  • 袁隆平网站设计模板北京最新发布信息
  • seo培训资料网站优化课程
  • 视频网站建设流程图网址生成短链接
  • 云南人才招聘网优化大师手机版下载
  • 网站接入服务商企业网站建设公司
  • 佛山哪里做网站搜索引擎营销的优势
  • 有没有做ppt好看的免费网站免费网站推广软文发布
  • 做网站必须要推广吗重大军事新闻