单向链表实现栈
首先我们要知道"栈"为何物 , 他是一种储存数据的方法 , 有点类似子弹夹 , 拥有先进后出的特点 . 同时进栈与出栈都只能在一端进行.
1,创建MyStack接口用来定义方法
public interface MyStack {
boolean isEmpty(); //判断是否为空
boolean pash(Object x); //入栈
Object pop(); //出栈
Object getTop(); //获得栈顶元素
}
2,创建链表实现就必须的Node节点类
public class Node {
private Object date; //存储元素
private Node next; //下一个指针对象
public Node(Object x) {
this.date=x;
this.next=null;
}
public Object getDate() {
return date;
}
public void setDate(Object date) {
this.date = date;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
3,创建MyStack接口的实现类MyStackLiked
1,创建两个属性一个用来作为记录有效个数的size , 还有一个用来作为指针的Node对象top
private Node top;
private int size;
2,pash方法
这是一个添加的方法也叫入栈
public boolean pash(Object x) {
Node newNode = new Node(x);
newNode.setNext(top);
top=newNode;
size++;
return true;
}
1,创建一个Node对象newNode用来存储要插入的元素
2,将top所指向的数据拼接在newNode的后面 , 这样一来我们就成功的吧新元素newNode给连接进来栈了
3,因为我们添加了新元素进来所以栈顶元素变成了newNode , 但是top每一次都是指向栈顶元素所以我们需要将top的元素更换 , 这时我们的top=newNode就可以满足 , 将top的元素变为了newNode
4,有效个数size++;
话不多说直接上图
3,pop方法
这是一个出栈方法
public Object pop() {
Object date = top.getDate();
top=top.getNext();
this.size--;
return date;
}
1,因为栈的特性只允许从栈顶出来 , 而且是先进后出 . 所以我们只能从栈顶出栈 , 又因为top指向栈顶元素所以我们就直接通过top.getDate方法获得栈顶元素的值
2,因为top指向的元素要出栈 , 所以我们需要调整top的指针指向 , 直接将top的下以为赋值给top让他达到top重指向的效果
3,有效元素个数size–;
4,isEmpty方法
public boolean isEmpty() {
return size==0;
}
这个方法没啥好说的直接让size和0作比较
5,getTop方法
public Object getTop() {
Object object=top.getDate();
return object;
}
这个方法也没啥好说的跟pop方法一样但是不用删除元素所以直接返回值就好了
小结
链表实现栈的操作其实并不难我们如果掌握了链表的只是就能很容易的写出来 , 如果单向链表不是很熟练的可以看一下这个博客还很详细
好说的跟pop方法一样但是不用删除元素所以直接返回值就好了**
小结
链表实现栈的操作其实并不难我们如果掌握了链表的只是就能很容易的写出来 , 如果单向链表不是很熟练的可以看一下这个博客还很详细
https://blog.youkuaiyun.com/qq_46487100/article/details/108941571