栈的特点
- 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。
栈是一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
- 栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。
- 栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。
顺序栈的特点
- 因为物理结构和逻辑结构均连续
- 顺序储存要求明确数据的规模用来分配数据空间
- 节省空间
顺序栈的java实现
package stack;
/**
* ================================数据结构说明:========================================
*
* 名称:顺序栈
*
* 特征:
* 1. 因为物理结构和逻辑结构均连续
* 3. 顺序储存要求明确数据的规模用来分配数据空间
* 4. 节省空间
*
* 主要方法:
* 1. init:初始化顺序表
* 2. destroy:销毁栈
* 3. clear:清空栈中的元素
* 4. length:获取数据表长度
* 5. getTop: 获取栈顶元素
* 6. pop: 退栈操作
* 7. isEmpty:判断顺序栈是否为空
* 8. print:打印顺序栈中的元素
*
* ======================================================================================
*/
/**
* @author 叶清逸
* @date 2018年7月31日上午11:23:26
* @version 1.0
* @project stack
*/
public class SeqStack implements Stack{
final int MAXSIZE = 100 ;
Object [] Element = null ;
int top ;
/**
* @see stack.Stack#init()
* @explain init方法:初始化栈
* @throws
* @author 叶清逸
* @date 2018年7月31日 上午11:55:21
*/
@Override
public void init() {
Element = new Object[MAXSIZE] ;
top = -1 ;
}
/**
* @see stack.Stack#destroy()
* @explain destroy方法:销毁栈
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:01:06
*/
@Override
public void destroy() {
if(Element == null){
System.out.println("错误!栈未初始化");
return ;
}
Element = null ;
top = -1 ;
}
/**
* @see stack.Stack#clear()
* @explain clear方法: 清空栈
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:01:40
*/
@Override
public void clear() {
if(Element == null){
System.out.println("错误!栈未初始化");
return ;
}
for(int i=0 ; i<top ; i++){
Element[i] = null ;
}
top = -1 ;
}
/**
* @see stack.Stack#isEmpty()
* @explain isEmpty方法: 判断栈是否为空
* @return 若为空返回true,否则返回false
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:04:02
*/
@Override
public boolean isEmpty() {
if(top == -1)
return true ;
else
return false;
}
/**
* @see stack.Stack#length()
* @explain length方法: 获取栈的长度
* @return 栈的长度
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:06:38
*/
@Override
public int length() {
if(Element == null){
System.out.println("错误!栈未初始化");
return -1;
}
return top+1;
}
/**
* @see stack.Stack#getTop()
* @explain getTop方法: 获取栈顶元素
* @return 返回栈顶元素
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:07:32
*/
@Override
public Object getTop() {
if(Element == null){
System.out.println("错误!栈未初始化");
return null;
}
return Element[top];
}
/**
* @see stack.Stack#push(java.lang.Object)
* @explain push方法: 将元素压进栈
* @param elem 要进栈的元素
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:09:49
*/
@Override
public void push(Object elem) {
if(Element == null){
System.out.println("错误!栈未初始化");
return ;
}
Element[top+1] = elem ;
top++ ;
}
/**
* @see stack.Stack#pop()
* @explain pop方法: 元素退栈
* @return 已退栈的元素
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:12:24
*/
@Override
public Object pop() {
if(Element == null){
System.out.println("错误!栈未初始化");
return null;
}
Object elem = Element[top] ;
Element[top] = null ;
top-- ;
return elem ;
}
/**
* @see stack.Stack#print()
* @explain print方法: 由栈底向栈顶打印元素
* @throws
* @author 叶清逸
* @date 2018年7月31日 下午12:14:45
*/
@Override
public void print() {
for(int i=0 ; i<=top ; i++){
System.out.print(Element[i]+" ");
}
System.out.println();
}
}