java 栈_Java数据结构之栈(stack)

一、概述

栈(stack):是线性表的一种,限制仅在线性表的一端进行插入和删除操作。其中允许插入和删除的一端称为栈顶(top),不允许插入和删除的一端称为栈底(bottom)。

二、 顺序存储栈的基本操作以及算法实现

基本操作:初始化、判断是否为空、求栈深、读取栈顶元素、出栈/入栈、栈置空等。

抽象出栈的基本操作:

public interface IStack{

public void push(Object obj);

public Object pop();

public int size();

public void clear();

public boolean isEmpty();

public Object top();

}

栈的顺序存储数据结构Java实现:

public class Stack implements IStack{

final int maxsize = 100;

int elem[] = new int[maxsize];

int top;

public Stack(){

top = 0;

}

}

1.栈置空

public void clear(){

top = 0;

}

2.判断栈是否为空

public boolean isEmpty(){

if(top > 0)

return false;

else

return true;

}

3.进栈操作

public void push(int data){

if(top==maxsize)

System.out.print("stack overflow");

else

elem[top++] = data;//进栈

}

4.出栈操作

pubic int pop(){

if(top==0)

return 0;

else

top--;//栈顶指针减1

return elem[top];//返回原栈顶元素

}

5.求栈深操作

public int size(){

return top;

}

6.读取栈顶元素

public int top(){

if(top==0)

return 0;

else

return elem[top-1];

}

三、链式存储栈的基本操作以及算法实现

说明:顺序存储的栈使用简单,但必须事先分配一定大小的存储空间,分配大了可能会造成浪费,分配小了空间不够可能出现栈溢出异常,此时可考虑链表存储栈中的元素,这样既不会造成浪费又不会造成栈溢出。

链式栈的结构如下:

//链栈中的数据结点结构

public class StackNode{

int data;

StackNode next;

}

//栈的基本操作不变

public class LinkStack implements IStack{

StackNode top;

public LinkStack(){

top.data = 0;

}

}

1.链栈的进栈操作

public void push(int data){

StackNode node = new StackNode();

node.data = data;

node.next = top;//链入新的结点

top = node;//修改栈顶指针

}

2.链栈的出栈操作

public int pop(){

int data;

if(top==null)

return 0;

else{

data = top.data;

top = top.next;

return data;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值