《数据结构之链表栈》

1.栈的定义

栈是一种特殊的线性表,栈中的元素以及元素间的逻辑关系与线性表相同,两者的差别在于:线性表的插入和删除可以在线性表的任意位置,而栈的插入和删除只能在链表的尾部进行。其中,栈中允许进行插入和删除的一端称为栈顶,另一端称为栈底。假设栈的数据元素序列为{a0, a1, a2, … , an-1},则a0称为栈底元素,an-1称为栈顶元素。将数据插入操作称为入栈,将数据删除操作称为出栈。
从栈的概念概念可知,栈是一种后进先出(LIFO)的线性表。

2.栈的抽象数据定义

栈也是由n(n≥0)个元素所构成的有限序列,其数据元素的类型可以是任意的,但是只要是同一种类型即可。根据栈的特性,接口描述如下。

public interface IList {
    public void clear();
    public boolean isEmpty();
    public Object top();
    public void push(Object data);
    public void pop() throws Exception;
    public int length();
    public void display();
}

栈根据存储结构不同也分为顺序结构栈和链式结构栈。

3.链式栈及其基本操作


public class LinkedStack implements IList {

    Node head;
    int size;

    LinkedStack(){
        head = null;
        size = 0;
    }

    public void clear(){
        head = null;
        size = 0;
    }
    public boolean isEmpty(){
        return head == null;
    }

    public Object top(){
        return head.getData();
    }

    public void push(Object data){
        head = new Node(head, data);
        size++;
    }

    public void pop() throws Exception{
        if(isEmpty()){
            throw new Exception("栈为空!!!");
        }
        head= head.getNext();
        size--;
    }

    public int length(){
        return size;
    }

    public void display(){
        Node pos = head;
        System.out.print("[");
        while(pos != null){
            System.out.print(pos.getData() + ",");
            pos = pos.getNext();
        }
         System.out.print("\b]\n");
    }
}

4. 测试

public class Test {

    public static void main(String[] args)  throws Exception{

        String exp = "2+3*5";
        char[] exps = exp.toCharArray();

        LinkedStack list = new LinkedStack();
        for(int i = 0; i < exps.length; i++){
            list.push(exps[i]);
        }
        list.display();

        for(int i = 0; i < exps.length; i++){
            list.pop();
            System.out.println(list.top() + ",");
        }
    }
}

结果

[5,*,3,+,2]                                                                       
[3,+,2] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值