前言
今天,老师问我们为什么要学栈,我想了想,我们为什么要学数据结构。我就去百度搜了一下,答案给我的是,不想当将军的士兵不是好士兵。就是有剑不用和没剑可用是两个概念。就悟了,数据结构和算法难吗?难!学吗?干!
栈的定义
限定在表的一端进行插入和删除运算的线性表,通常将插入、删除的一端称为栈顶(top),另一端为栈底(bottom)。不含元素的空表为空栈。
相关运算
- 置空栈
- 判栈空
- 判栈满
- 进栈
- 退栈
- 取栈顶元素
相关代码
定义栈并初始化
/**最大值*/
private int maxSize =100;
/**栈*/
private int[] stack;
/**栈顶*/
private int top=-1;
/**无参构造器**/
public seqStack() {
stack = new int[maxSize];
}
/**有参构造器**/
public seqStack(int maxSize) {
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
判栈满
/**栈满*/
public boolean isFull() {
return top==maxSize-1;
}
判栈空
/**栈空*/
public boolean isEmpty() {
//判断是否为-1,就是判断是否为空
return top==-1;
入栈
/**入栈-push*/
public void push(int value) {
//先判断是否栈满了
if(isFull()) {
System.out.println(value+"入栈失败,因为栈已经满了~");
return;
}else {
top++;
stack[top]=value;
System.out.println(stack[top]+"入栈成功");
}
}
出栈
/**出栈-pop*/
public int pop() {
if(isEmpty()) {
throw new RuntimeException("栈已经空了~");
}
int value=stack[top];
top--;
System.out.println(stack[top]+"已经退栈了");
return value;
}
遍历栈
/**遍历栈*/
public void tostring() {
if(isEmpty()) {
System.out.println("栈空,没有数据~");
}
for(int i=top;i>=0;i--) {
System.out.print("stack[i]="+stack[i]+"\t");
}
}
全部代码
package com.数据结构.栈;
/**
* @author:pier
* 2021/10/28
**/
public class seqStack {
/**最大值*/
private int maxSize =100;
/**栈*/
private int[] stack;
/**栈顶*/
private int top=-1;
/**无参构造器**/
public seqStack() {
stack = new int[maxSize];
}
/**有参构造器**/
public seqStack(int maxSize) {
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
/**栈满*/
public boolean isFull() {
return top==maxSize-1;
}
/**栈空*/
public boolean isEmpty() {
//判断是否为-1,就是判断是否为空
return top==-1;
}
/**入栈-push*/
public void push(int value) {
//先判断是否栈满了
if(isFull()) {
System.out.println(value+"入栈失败,因为栈已经满了~");
return;
}else {
top++;
stack[top]=value;
System.out.println(stack[top]+"入栈成功");
}
}
/**出栈-pop*/
public int pop() {
if(isEmpty()) {
throw new RuntimeException("栈已经空了~");
}
int value=stack[top];
top--;
System.out.println(stack[top]+"已经退栈了");
return value;
}
/**遍历栈*/
public void tostring() {
if(isEmpty()) {
System.out.println("栈空,没有数据~");
}
for(int i=top;i>=0;i--) {
System.out.print("stack[i]="+stack[i]+"\t");
}
}
}
测试代码
package com.数据结构.栈;
/**
* @author:pier 2021/10/28
**/
public class Test {
public static void main(String[] args) {
seqStack ss = new seqStack(5);
ss.push(1);
ss.push(2);
ss.push(3);
ss.push(4);
ss.push(5);
ss.pop();
ss.push(6);
ss.push(7);
ss.tostring();
}
}
运行结果
> 今天你学废了吗?