码迷,mamicode.com
首页 > 其他好文 > 详细

单链表与栈

时间:2018-01-20 11:08:20      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:color   sem   post   int   第一步   说明   最大   bool   函数   

(一)

栈,后进先出,只允许访问一个数据项:即最后插入的数据项。栈操作:

push入栈:第一步指针上移一个单位,第二步将数据插入到这个存储单元;

pop出栈:第一步移除指针指向的数据项,第二步指针下移一个单位,指向新的栈顶元素;

peek查看:不操作元素,只是查看栈顶元素的值;


技术分享图片

技术分享图片

技术分享图片

结果:

技术分享图片

上面的实现是用数组实现的,有个最大缺点是一旦数组创建,大小不可变。下面介绍另一种存储结构-链表。

首先,在链表中,每个数据项都包含在“链结点”中,这个链结点包括存储的数据本身和一个对下一个链结点引用的字段,链表本身有一个字段指向对第一个链结点的引用。用图形标识大致是这样子的:(其实first也是一个链结点)

技术分享图片

链结点类:

package stack;
//链结点
public class Link {
    public int data;
    public Link next;
    
    Link(int data){
        this.data = data;
        next = null;
    }
    public void show(){
        System.out.print(" data:"+this.data);
    }
}

单链表类:

package stack;

//单链表
public class LinkedList {
    private Link first;
    //构造函数
    LinkedList(){
        this.first = null;
    }
    public Link getFirst() {
        return first;
    }
    //在前端插入
    public void insertFirst(int data){
        Link newLink = new Link(data);
        newLink.next = first;
        first = newLink;
    }
    //在前段删除
    public void deleteFirst(){
        if(!this.isEmpty()){
            Link deleteLink = first;
            first = deleteLink.next;
            //或者 first = first.next;
        }
    }
    //判断是否为空
    public boolean isEmpty(){
        return first == null;
    }
    //遍历
    public void showLinkedList(){
        Link current = first;
        while(current != null){
            current.show();
            current = current.next;
        }
        System.out.println();
    }
}

栈类:

package stack;
public class Stack {
    
    private LinkedList linkedList;
    //默认构造方法
    public Stack(){
        linkedList = new LinkedList();
    }
    //进栈
    public void push(int newNum){
        linkedList.insertFirst(newNum);
    }
    //出栈
    public void pop(){
        linkedList.deleteFirst();
    }
    //查看
    public int peek(){
        return linkedList.getFirst().data;
    }
    //遍历栈
    public void showStack() {
        linkedList.showLinkedList();
    }
}

测试类:

package stack;

public class Test {
    public static void main(String[] args) {
        Stack stack = new Stack();
        stack.push(1);
        stack.push(2);
        stack.push(5);
        stack.showStack();
        stack.pop();
        stack.showStack();
    }
}

结果:

 技术分享图片

这里着重说明一下,单链表的前端插入,由于我学过c++,指针与引用作用虽然差不多,但是总用法与直观感觉不一样。

插入之前

技术分享图片

此时 first = oldLink

技术分享图片

插入之后

技术分享图片

此时newLink.nest = oldLink, first = newLink

技术分享图片

ps:画的有点粗糙!

 

单链表与栈

标签:color   sem   post   int   第一步   说明   最大   bool   函数   

原文地址:https://www.cnblogs.com/caozx/p/8303687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!