继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java数据结构之栈(stack)

是王小二呀
关注TA
已关注
手记 8
粉丝 59
获赞 219

一、概述
栈(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;
    }
}
打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP