栈的定义
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"
最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,
要到最后才能删除。
放上网上找的一张图更为清晰。
在Java我用数组去实现了栈这一线性表的数据结构
package com.gaorui.Stack;
/**
* Java实现栈
* @author JavaGR_ais
*
*/
public class Stack {
private Object stack[];//定义类型为Object的数组来保存进栈的数组
private int maxsize;//定义栈的大小
private int top;//定义栈顶的位置游标
<span style="white-space:pre"> </span>//初始化栈对象,因为我这里用数组模拟的,数组长度必须指定,所以必须确定栈的大小
public Stack(int maxsize) {
this.maxsize = maxsize;
stack = new Object[maxsize];//初始化数组
top = -1;//因为现在没有数据压入栈,所以让栈顶的游标为0
}
<span style="white-space:pre"> </span>//获取栈的大小,即栈顶元素的游标+1
public int getStackSize() {
if (top == -1) {
return 0;
}
return top + 1;
}
public int getSize() {
return maxsize;
}
<span style="white-space:pre"> </span>//数据进栈
public void push(Object data) {
stack[++top] = data;//这里注意是前++,保证top值在这条语句执行完之前+1
}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//数据出栈
public Object pop() {
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//没有数据在栈里,返回null
if (top == -1) {
return "null";
}
<span style="white-space:pre"> </span>//有数据返回栈顶元素,栈顶游标top -1
return stack[top--];
}
public Object peek() {
if(top==-1){
return "null";
}
return stack[top--];
}
public static void main(String[] args) throws Exception {
Stack stack = new Stack(1000);
stack.push(new String("1"));
stack.push(new String("2"));
stack.push(new String("3"));
System.out.println(stack.getStackSize() + "Stack");
stack.push(new String("4"));
stack.push(new String("5"));
stack.push(new String("嘻嘻"));
// System.out.println(stack.peek());
System.out.println(stack.peek());
/* while (stack.top >= 0) {
System.out.println(stack.pop());
}*/
}
}