(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
目录
前言
本文将使用java语言使用int[] 数组模拟实现栈以及其基本方法(入栈出栈遍历等)
一、Stack (栈)是什么?
(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
二、具体实现
1.思路分析
栈的成员变量至少应该包括以下三个部分:
private int maxSize;//栈的大小 private int[] stack;//数组模拟栈,数据就放在数组 private int top=-1; //top 表示栈顶 初始化为-1
通过移动top来表示栈中元素的个数
代码如下:
private int maxSize;//栈的大小
private int[] stack;//数组模拟栈,数据就放在改数组
private int top=-1; //top 表示栈顶 初始化为-1
//构造器
public ArrayStack(int maxSize ){
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
2.辅助方法isFull isEmpty
判断栈是满还是空 可以通过top的值来判断,如果为空 top就是初始值-1 如果满了 就是初始值加上maxSize
//栈满
public boolean isFull(){
return top==maxSize-1;
}
//栈空
public boolean isEmpty(){
return top==-1;
}
3.push方法 (入栈)
入栈方法 push 将一个元素放入栈中 top 向上移动一位 ,然后令stack 数组的第top 个元素=value;
//入栈 push
public void push(int value){
//先判断是不是满了
if (isFull()){
return;
}
top++;
stack[top]=value;
}
4.pop方法(出栈)
出栈方法思路:首先判断栈是否为空 ,如果是空,就不能再出栈了,如果不为空将栈顶元素 即 stack[top]赋值给一个新的对象 然后将top指针下移一位 返回刚刚创建的对象
public int pop(){
if (isEmpty()){
throw new RuntimeException();
}
int value = stack[top];
top--;
return value;
}
将异常对象的引用传递给throw,从效果上看,它就像从方法中“返回”一样,可以将异常处理当做一种不同的返回机制。不同的是return返回到方法调用点,throw返回到异常处理程序。
5. list 与peek方法 (遍历和取值方法)
public void list(){
if (isEmpty()){
throw new RuntimeException();
}
for (int i=top ;i>=0;i--){
System.out.println(stack[i]);
}
}
public int peek() {
return stack[top];
}
总结
以上就是数据结构栈的基本方法