一、顺序栈和链栈区别如下:
1、存储结构不同,顺序栈是静态分配的,而链栈则是动态分配的,链栈可以将很多零碎的空间利用起来,容量可变,节省空间,顺序栈则固定内存空间,容量不变。
顺序栈数组元素存储位置连续存于内存中,且编译器要求编译期确定数组大小,链式栈元素存储于不连续地址,属于动态申请内存;
2、时间复杂度:顺序栈存储结构的时间复杂度较小,效率较高,链式栈存储结构的时间复杂度较高,效率较低;
3、实现方式: 顺序栈是数组实现方式,链式栈是链表实现方式。
4、使用方面,顺序栈查询速度快,链栈添加删除数据更快。
二、Java实现对栈的操作
package com.wyl.linklist;
/**
* 栈的定义及相关操作
* 用数组实现栈
* 栈是一个线性表,不过进栈和出栈操作在表尾操作
* @author wyl
*
*/
public class MyStack {
private static final Integer STACKSIZE = 100; //声明栈的容量
private Integer base; //栈底索引
private Integer top; //栈顶索引
private Integer[] stack; //声明栈,用数组实现
public MyStack(){
base = top = -1; //空栈
stack = new Integer[STACKSIZE];
}
/**
* 栈判空
*/
public boolean isEmpty(){
return top == base; //栈顶与栈底指向同一空间即为空栈
}
/**
* 栈判满
*/
public boolean isFull(){
return top >= STACKSIZE-1;
}
/**
* 入栈
*/
public void push(Integer data){
if(isFull()){
System.out.println("栈已满");
}else{
stack[++top] = data;
}
}
/**
* 出栈操作
*/
public void pop(){
if(isEmpty()){
System.out.println("栈为空");
}else{
System.out.println(stack[top--]);
}
}
/**
* 清空栈
*/
public void clear(){
if(!isEmpty()){
int size = top-base;
for(int i=0;i<size;i++){
stack[i]=null;
}
top = base = -1;
}
}
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(23);
myStack.push(24);
myStack.push(25);
myStack.push(26);
myStack.pop();
myStack.pop();
myStack.pop();
myStack.pop();
myStack.pop();
myStack.clear();
myStack.pop();
}
}