数据结构------栈的基本操作1

栈的实现1(顺序栈)

基础知识:
1、在非空栈中,top指针始终指向栈顶元素的下一个位置
2、结点进栈:先将数据元素保存在栈顶(top所指的当前位置),然后执行top+1,时top指向栈顶的下一个位置
3、结点出栈:先执行top-1使top指向栈顶元素的存储位置,然后将栈顶元素取出
4、判栈空/满:(栈顶指针top 栈底指针base 栈的存储空间StackSize)
栈空:top==base 指针指向同一位置
栈满:top-base>=StackSize
5、出栈与取栈的区别
出栈操作改变栈顶指针top的位置,取栈不需要改变

======================================================================

顺序栈

接口类IStack

public interface IStack<E> {
	//初始化
	public void init(int initsize);
	//判栈空
	public boolean isEmpty();
	//判栈满
	public boolean isFull();
	//压栈(元素进栈)
	public void push(E e);
	//取栈顶元素
	public Object getTop();
	//弹栈(元素出栈)
	public Object pop();
	//找到指定位置的元素
	public Object getindexdata(int index);
	//遍历栈
	public void print();
}

实现类Stack

public class Stack<E> implements IStack<E>{
	public Object[] array;	//顺序栈将数据存储在数组中
	public int top;//栈顶指针
	public int base=0;//栈底指针
	public int maxsize;//最大容量
	//初始化栈
	//默认初始化栈
	public void init(){
		maxsize=20;
		array=new Object[maxsize];
		top=0;
	}
	public void init(int initsize) {
		if(initsize>0){
			array=new Object[initsize];
			top=0;
			maxsize=initsize;
		}
	}
	//判栈空
	public boolean isEmpty() {
		//栈顶和栈底指针相等都指向栈底
		return top==base?true:false;
	}
	//判栈满
	public boolean isFull() {
		//如果栈顶指针减去栈底指针>=数组的最大长度则位满
		return top-base>=maxsize?true:false;
	}
	//压栈(元素进栈)
	public void push(Object e) {
		if(isFull()){
			System.out.println("栈已满");
			return;//中止
		}else{
			array[top]=e;
			top++;
			System.out.println(e+"加入成功,top现在指针位:"+top);
		}
	}
	//得到栈顶元素(不用出栈)
	public Object getTop() {
		Object topdata=null;
		if(isEmpty()){
			System.out.println("栈空");
		}else{
			//取栈顶元素不需要改变指针位置
			topdata=array[top-1];
		}
		return topdata;
	}
	//弹栈(元素出栈)
	public Object pop() {
		Object topdata=null;
		if(isEmpty()){
			System.out.println("栈空");
		}else{
			top--;
			topdata=array[top];
			System.out.println(topdata+"弹出栈,指针现在位置:"+top);
		}
		return topdata;
	}
	//找到指定位置的元素
	public Object getindexdata(int index){
		Object indexdata=null;
		if(index>top){
			System.out.println("所查元素超出范围");
		}
		while(!isEmpty()){
			if(index==top){
				indexdata=array[top-1];//因为指针会提前指向上一个位子
			}
			top--;
		}
		System.out.println("第"+index+"位的元素位"+indexdata);
		return indexdata;
		
	}
	//遍历栈
	public void print(){
		while(!isEmpty()){
			System.out.print(array[top-1]+" ");
			top--;
		}
	}
	
	public static void main(String[] args) {
		Stack s=new Stack();
		s.init(50);
		s.push("a");
		s.push("1");
		s.push("aa");
		s.pop();
		//s.getindexdata(3);
		//s.print();
		System.out.println("栈顶元素为:"+s.getTop());
		/*测试超过指定长度    不会报错
		 * for(int i=0;i<=55;i++){
			s.push(i);
			}
		*/
		System.out.println(s.isEmpty());
		
	}
	
}

输出
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值