Java实现栈的顺序存储

Java实现栈的顺序存储和链式存储

栈的特点是后进先出,栈的插入和删除操作受限制,栈的插入和删除操作只允许在线性表的一端操作。

在这里插入图片描述
栈中插入数据元素的过程为入栈(push),删除数据元素的过程称为出栈(pop).当栈中没有数据元素时称之为空栈。允许操作的一端称为栈顶-top,不允许操作的一端称为栈底bottom

栈的基本操作

1、栈的初始化,设置栈状态为空
2、判断栈的状态是否为空
3、判断栈的状态是否已满
4、入栈:入栈过程中必须要判断栈的状态,如果栈不满则接受新数据元素入栈,否则产生上溢错误overflow
5、出栈:在出栈之前也必须判断栈的状态,如果栈的状态为空,产生下溢错误underflow
6、获得栈顶数据元素,此时该数据元素未出栈

栈的顺序栈的基本操作

package cn.chen.stack;
/**
 * 实现栈的顺序存储
 * 
 * @author 等风来
 * */
public class Stack {
	//定义一个数组
	private Object table[];
	//定义一个栈顶指针
	private int top;
	
	public Stack(int size){
		//为table数组申请空间
		table = new Object[size];
		//给top指针赋初值
		top = -1;
	}
	
	public Stack(){
		//如果没有指定table数组的长度,则默认调用有参的构造方法
		this(25);
	}
	
	//判断栈是否为空、
	public boolean isEmpty(){
		//如果top任然为-1则证明栈为空栈
		return top == -1;
	}
	
	//判断栈是否已满
	public boolean isFull(){
		//如果top大于数组长度则代表栈已满
		return top >= table.length;
	}
	
	//入栈
	public boolean push(Object obj){
		//判断栈是否已满
		if(!isFull()){
			//栈顶指针自加
			top++;
			//将obj存储到下标为top的数组
			table[top] = obj;
			return true;
		}
		System.out.println("栈已满,"+obj+"无法入栈");
		return false;
	}
	
	//出栈
	public Object pop(){
		//定义一个变量用于接收出栈的元素
		Object obj = null;
		//如果栈非空则让栈顶元素出栈
		if(!isEmpty()){
			//取得栈顶元素
			obj = table[top];
			//清空当前栈顶元素
			table[top] = null;
			//栈顶指针自剪
			top -- ;
			//返回obj
			return obj;
		}
		//如果栈顶为空则返回null
		return null;
	}
	
	public static void main(String[] args) {
		//创建对象
		Stack s = new Stack();
		//入栈
		for(int i = 1; i <= 3; i++){
			s.push(i);
		}
		//出栈
		for(int i = 1; i <= 3; i++){
			System.out.println(s.pop());
		}
	}
}

栈的链式储存代码

package cn.chen.stack;

import cn.chen.exercise.Node;

public class stack_chained {
	//定义一个栈顶指针
	private Node top;
	
	//构造方法初始化
	public stack_chained(){
		top = null;
	}
	
	//判断栈是否为空
	public boolean isEmpty(){
		return top == null;
	}
	
	//入栈
	public boolean push(int k){
		//将k构建成节点
		Node n = new Node(k);
		//将节点串联起来
		n.setNext(top);
		//将top上移
		top = n;
		return true;
	}
	
	//出栈
	public int pop(){
		//定义一个变量用于接收出栈元素
		int  k = -1;
		//判断栈是否为空
		if(!isEmpty()){
			//接收栈顶元素
			k = top.getData();
			//top下移
			top = top.getNext();
			
		}
		return k;
	}
	
	//获取栈顶元素
	public int get(){
		//定义一个变量用于接收出栈元素
		int  k = -1;
		//判断栈是否为空
		if(!isEmpty()){
			//接收栈顶元素
			k = top.getData();
			
		}
		return k;
	}
	
	public static void main(String[] args) {
		stack_chained  s = new stack_chained();
		//入栈
		System.out.print("入栈中");
		for(int i = 1; i < 4; i++){
			System.out.print(".");
			s.push(i);
		}
		
		System.out.println("出栈");
		while(!s.isEmpty()){
			//获取栈顶元素
			System.out.print("\n栈顶元素为:");
			System.out.print(s.get());
			System.out.println("\t"+s.pop());
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qiu_20170812/article/details/89951793