本篇内容主要使用数组、链表和集合实现栈结构,完成栈基本操作,判空、初始化、入栈、出栈、栈顶元素等。
1.栈的数组实现
栈顶指针top,其指向在于栈顶元素的下一个空位置!
直接上代码,实现栈的数组实现!
class Mystack<T> {
private Object[] stack;
private int top;
//初始化
Mystack(){
stack = new Object[10];
}
public void push(T t){
//todo 数组空间不足扩容
stack[top++] = t;
}
public T pop(){
return (T) stack[--top];
}
public T peek(){
if(isEmpty()) return null;
return (T) stack[top-1];
}
public boolean isEmpty(){
return top == 0 ? true : false;
}
public static void main(String[] args) {
Mystack<String> stack = new Mystack<>();
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
stack.push("java");
stack.push("is");
stack.push("beautiful");
stack.push("language");
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
}
}
2.栈的链表实现
栈顶设置在头节点,注意不带虚拟头节点!采用头插法完成栈的链表实现,直接上代码!
class ListStack<T> {
//定义链表
class Node<T> {
public T t;
public Node<T> next;
public Node(T t){
this.t = t;
this.next = null;
}
}
public Node<T> head;
//构造函数初始化头指针
ListStack() {
head = null;
}
//入栈
public void push(T t) {
if(head == null){
head = new Node<>(t);
}else{
Node<T> tmp = head;
head = new Node<>(t);
head.next = tmp;
}
}
//出栈
public T pop() {
if(isEmpty()){
return null;
}
T t = head.t;
head = head.next;
return t;
}
//取栈顶元素
public T peek() {
if(isEmpty()){
return null;
}
T t = head.t;
return t;
}
//栈空
public boolean isEmpty() {
return head == null ? true : false;
}
public static void main(String[] args) {
ListStack stack = new ListStack();
System.out.println(stack.isEmpty());
stack.push("Java");
stack.push("is");
stack.push("beautiful");
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
}
}
3.栈的集合实现
主要使用LinkList实现栈,直接上代码!
public class LinkedListStack<T> {
//定义栈
LinkedList<T> linkedList = new LinkedList<>();
//入栈
public void push(T t) {
linkedList.addFirst(t);
}
//出栈
public T pop() {
if(isEmpty()) return null;
return linkedList.removeFirst();
}
//栈顶元素
public T peek() {
if(isEmpty()) return null;
return linkedList.getFirst();
}
//栈空
public boolean isEmpty() {
return linkedList.isEmpty();
}
public static void main(String[] args) {
LinkedListStack<String> stack = new LinkedListStack();
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
stack.push("java");
stack.push("is");
stack.push("beautiful");
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
}
}
OK,《算法通关村第四关——栈青铜挑战笔记》结束,喜欢的朋友三联加关注!关注鱼市带给你不一样的算法小感悟!(幻听)
再次,感谢鱼骨头教官的学习路线!鱼皮的宣传!小y的陪伴!ok,拜拜,第四关第二幕见!