前言
本章用于主要讲述 栈 中 顺序栈 的介绍与使用,阅读时长约 5min 。
栈
介绍:
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算
规格:
栈允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP);按照后进先出(LIFO, Last In First Out) 的原理运作,称为后进先出表。
特点:
- 空间是静态分配的
- 栈比链栈查询速度更快
- 先进后出,栈底是固定的,最先入栈的只能在栈底
- 限制了只能在栈顶(尾部)进行数据的插入与删除
复杂度分析
栈属于常见的一种线性结构,对于进栈和退栈而言,时间复杂度都为 O(1)
前奏准备
本文章讲解所用的编程语言为 Java
基本方法
顺序栈与顺序表一致都是用数组来实现的,首先需要先定义一个为 stack 用于存储数据的数组;还有由于入栈和出栈只能在栈顶操作,因此还需定义一个 top 用于指向栈顶元素的位置
所需的方法不多,主要的为 入栈 与 出栈
public class Stack {
Object[] stackElem; // 对象数组
int top; // 栈顶: 非空时始终指向栈顶元素的下一个存储位置
public Stack(int maxSize) {
top = 0; // 默认值; 当栈为空,top值为0
stackElem = new Object[maxSize]; // 存储空间容量
}
// 取出栈顶元素
public int peek() {}
// 栈是否为空
public boolean isEmpty() {}
// 添加入栈
public void push(Object e) {}
// 删除出栈
public Object pop(Object e) {}
// 栈中元素的个数
public int length() {}
// 清空栈
public void clear() {}
// 输出从栈顶到栈顶的所有元素
public void display() {}
}
前奏准备完毕后,我们就可以开始重写方法了 (●'◡'●)
length(个数)与 clear(清空)
先来两个简单的;length 用于返回栈中元素的个数,clear 用于清空栈
代码示例
// 栈中元素的个数
public int length() {
return top;
}
// 清空栈
public void clear() {
top = 0;
}
isEmpty(判空)
这个很多小伙伴应该都大致清楚是怎么实现的;如果有元素 top 就不为空 ,所以直接判断即可。
代码示例
// 栈是否为空
public boolean isEmpty() {
return top == 0;
}
push(入栈)
入栈操作是将指定数据元素插入顺序栈中,使其成为新的栈顶元素,类型为 Object
入栈方法的思路:
- 判断是否栈满
- 将新的数据存入top所指向的存储单元,使其成为新的栈顶;
- 栈顶指针
top+1;
代码示例
// 添加入栈
public void push(Object e) {
if (top == stackElem.length) {
throw new RuntimeException("栈堆已满");
} else {
stackElem[top++] = e;
}
}
图文解析
pop(出栈)
入栈操作是将栈顶元素从栈中移去,并返回被移去的栈的元素的值
出栈方法的思路:
- 判断栈是否为空
- 先将
top -1再使栈顶指针指向栈顶元素,并返回栈顶元素
代码示例
// 删除出栈
public Object pop(Object e) {
if (isEmpty()) {
return null;
}
return stackElem[--top];
}
peek(取出)
peek 用于取出栈顶元素
取出方法的思路:
- 判断栈是否为空
- 若不为空,返回当前栈顶元素(索引为
top -1)
代码示例
public Object peek() {
if(isEmpty()){
return null;
}else{
return stackElem[top-1];
}
}
display(输出)
display 用于从栈顶开始循环向下,输出从栈顶到栈顶的所有元素
代码示例
public void display() {
for (int i = top - 1; i >= 0; i--) {
System.out.println(i + " - " + stackElem[i].toString());
}
}
打印示例
最后我们将所有方法测试一下~
以上就是顺序栈的介绍与方法实现了 o( ̄▽ ̄)d