欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 【数据结构_7】栈和队列(上)

【数据结构_7】栈和队列(上)

2025/4/19 7:48:03 来源:https://blog.csdn.net/purrrew/article/details/147196597  浏览:    关键词:【数据结构_7】栈和队列(上)

一、概念

栈和队列,也是基于顺序表和链表实现的

栈是一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。

遵循后进先出的原则

此处所见到的栈,本质上就是一个顺序表/链表,但是,实在顺序表/链表的基础上做出了限制

对栈来说禁止了顺序表/链表的各种增删改查,只支持三个操作:入栈、出栈、取栈顶元素

因此我们可以认为,栈就是只支持尾插、尾删、获取尾部元素的顺序表/链表

栈虽然在功能上做出了限制,但是他却是能在特定场景下,解决特定问题的特定手段

*顺序表链表这样的结构,功能太丰富了,容易出错;栈/队列针对特定的场景,对顺序表链表做出了限制,从而大大降低了出错的概率

二、栈的一些操作

package stack;import java.util.Stack;public class test1 {public static void main(String[] args) {//使用  标准库的栈Stack<String> stack = new Stack<>();//入栈操作stack.push("aaa");stack.push("bbb");stack.push("ccc");//取栈顶元素,知识查看一下栈顶的元素内容,不会把整个元素出栈String top = stack.peek();System.out.println(top);//出栈,返回当前出栈的元素的内容String str = stack.pop();System.out.println(str);}}

三、Stack基本功能的实现

package stack;//模拟实现一个栈
//可以基于顺序表(数组)实现,也可以基于链表来实现
//基于数组更加简单public class MyStack {private String[] arr;private int size =0;public MyStack(){arr = new String[1000];size =0;}public MyStack(int capacity){arr = new String[capacity];size = 0;}public void resize(){//1.创建一个更长的数组String[] newArr = new String[arr.length*2];//2.把原来数组的元素复制到新数组for (int i =0;i<arr.length;i++){newArr[i] = arr[i];}//3.把新数组赋值给原数组arr = newArr;}//入栈public void push(String elem){//如果空间不够了我们要实现扩容操作if(size == arr.length){resize();}//实现一个尾插操作arr[size]= elem;size++;}//出栈public String pop(){//考虑特殊情况if(size ==0){throw new RuntimeException("Stack is empty!");}String str = arr[size-1];//不要忘了把元素个数减去一个size--;return str;}//获取栈顶元素public String peek(){if(size == 0 ){throw new RuntimeException("Stack is empty!");}String elem = arr[size-1];return elem;//这里跟上面出栈的不同就是这里的元素个数不要--}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词