分别用四个字描述栈和队列
栈:后进先出
队列:先进先出
栈
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
它的三个核心操作
- 入栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。(最后吃的在肚子上面)
- 出栈:栈的删除操作叫做出栈。出数据在栈顶。(最后吃的先吐)
- 取栈顶元素:把栈顶的元素取出来看看。
顺序表实现一个栈(使用一个数组来实现栈)
package package11_1;
public class MyStack {
private int[] arrays = new int[100];
private int size = 0;
//入栈
public void push(int x){
arrays[size] = x;
size++;
}
//出栈,返回这个元素值
public Integer pop(){
if(size == 0){
return null;
}
Integer ret = arrays[size - 1];
size--;
return ret;
}
//取栈顶元素
public Integer peek(){
if (size == 0){
return null;
}
return arrays[size - 1];
}
//判断是否为空
public boolean isEmpty(){
return size == 0;
}
public int size(){
return size;
}
}
用链表来实现
package package11_2;
public class MyStack2 {
//后进先出
private Node head = null;
private int size = 0;
//入栈
public void push(int x){
Node newNode = new Node(x);
if(head == null){
//空栈
head = newNode;
size++;
return;
}
newNode.next = head;
head = newNode;
size++;
}
//出栈
public Integer pop(){
if(head == null){
return null;
}
Integer ret = head.val;
head = head.next;
size--;
return ret;
}
//取栈顶元素
public Integer peek(){
if(head == null){
return null;
}
return head.val;
}
public boolean isEmpty(){
return size == 0;
}
public static void main(String[] args) {
MyStack2 myStack2 = new MyStack2();
myStack2.push(1);
myStack2.push(2);
myStack2.push(3);
myStack2.push(4);
while (!myStack2.isEmpty()){
Integer cur = myStack2.peek();
System.out.println(cur);
myStack2.pop();
}
}
}