Java实现简单的栈

栈的定义  

     栈(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());
		}*/
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值