链式栈
采用链式存储结构的栈push()、pop()、peek()方法的时间复杂度为O(1)
java实现:package com.ds.stack;
public class LinkedStack {
/**
* title : 单链表类
*
* @author zhb
*
* @param
*/
private class Node {
public T data; // 数据域 保存数据元素
public Node next; // 地址域 引用后继结点
/**
* 构造结点, data指定数据元素, next指定后继结点
*
* @param data
* @param next
*/
public Node(T data, Node next) {
this.data = data;
this.next = next;
}
public Node() {
this(null, null);
}
}
Node top = new Node();// 栈顶结点,单链表结点类
public LinkedStack() {
this.top = null;
}
// 判断是否是空战
public boolean isEmpty() {
return this.top == null;
}
// 元素 x 入栈
public void push(T x) {
if(x != null)
this.top = new Node(x,this.top);
}
// 出栈,返回当前栈顶元素
public T pop() {
if(isEmpty()){
return null;
}
T temp = this.top.data;
this.top = this.top.next;
return temp;
}
// 取出栈顶元素,未出栈
public T peek() {
return this.top == null ? null:this.top.data;
}
public static void main(String[] args) {
LinkedStack stack = new LinkedStack();
stack.push("Java");
stack.push("Php");
stack.push("C++");
stack.push("C#");
System.out.println(stack.pop());
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
}
}
运行结果:C++
C++
false
如果存在问题,我们随时交流!