最近在准备学校校招,复习了一些简单的数据结构知识,写了一些简单的实现代码。
在此将它记录下来,以便复习。
下面是利用链表来实现一个栈,已经相关的栈操作。
package com.wp.datastruct;
import java.security.Principal;
/**
* 基于链表实现栈
* */
public class MyStack2<E> {
StackNode<E> top = null; //栈顶,也是一个node节点
public boolean isEmpty() {
return top == null;
}
/**
* 往栈中push一个数据:
* 首先将要push的数据的next赋值为栈顶top
* 然后将栈顶指针指向新push进来的节点
* */
public void push(E data) {
StackNode<E> newNode = new StackNode<E>(data);
newNode.next = top;
top = newNode;
}
/**
* 从栈中弹出一个数据,
* 将栈顶指针指向弹出节点的下一个
* */
public E pop() {
if(this.isEmpty()) {
System.out.println("栈已经空啦!不能再出栈啦!!!");
return null;
}
E data = top.data;
top = top.next;
return data;
}
/**
* 返回栈顶数据,但是不出栈。数据任然保存在栈中
* */
public E peek() {
if(isEmpty()) {
return null;
}
return top.data;
}
//将栈中所有数据出栈
public void printStack() {
System.out.println("开始出栈:");
while(!isEmpty()) {
System.out.println(top.data);
top = top.next;
}
System.out.println("出栈结束!");
}
public static void main(String[] args) {
MyStack2<Integer> myStack2 = new MyStack2<>(); //创建一个栈
myStack2.push(1);
myStack2.push(2);
myStack2.push(3);
System.out.println(myStack2.pop());
System.out.println(myStack2.pop());
System.out.println(myStack2.peek()); //打印出栈顶数据,但是不进行出栈操作,数据任然在栈中
System.out.println(myStack2.pop()); //继续出栈
//myStack2.printStack();
}
}