栈(基于数组以及JAVA语言的实现)
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈的特点是先进后出的有序列表。
以下为栈基本操作(以数组为原理)的图解:
(1)定义一个数组
(2)定义栈顶并初始化top = -1
(3)入栈的操作:先top++指向下一个索引,再辅助stack[top] = value
(4)出栈的操作:先把值取出来value = stack[top],再指向上一个索引top--
‘
以下为实现代码:
’package com.java;
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack stack = new ArrayStack(10);
for(int i = 0;i< 10;i++)
{
stack.push(i);
}
stack.pop();
stack.list();
}
class ArrayStack
{
private int maxSize;//定义栈的大小
private int top = -1;//定义栈顶为-1
private int[] stack;//定义一个栈的数组,栈的数据就放在数组
//构造器,初始化栈数组大小
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize];
}
//判断栈是否满
public boolean ifFull()
{
return top == maxSize - 1;
}
//判断栈是否为空
public boolean ifEmpty()
{
return top == -1;
}
//进栈操作
public void push(int value)
{
//判断栈是否满
if (ifFull())
{
System.out.println("栈已满,无法添加!");
return;
}
stack[++top] = value;
}
//出栈操作
public int pop()
{
//判断栈是否为空
if (ifEmpty())
{
System.out.println("栈为空,无法出栈");
return 0 ;
}
int value = 0;//声明一个数据,接收出栈的值
value = stack[top--];
return value;
}
//遍历栈操作
public void list()
{
if (ifEmpty())
{
System.out.println("栈为空,无法遍历");
return;
}
for (int i = top; i >= 0; i--) {
System.out.println(stack[i]);
}
}
//返回栈顶的值
public int peek()
{
return stack[top];
}
}