目录
一,栈的概念及其结构
二,栈的方法及其实现
2.1 栈
2.2 push(int val) - 进栈
2.3 pop() - 出栈
2.4 peek() - 得到栈顶元素
2.5 size() - 栈的大小
2.6 empty()
2.7 isFull()
三,队列的概念及其结构
四,队列的方法及其实现
4.1队列
4.2 offer(int val) - 入队列
4.3 poll() - 出队列
4.4 peek() - 获得队头元素
一,栈的概念及其结构
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。画个图来理解一下:
二,栈的方法及其实现
2.1 栈
栈的定义及其拥有的方法,(了解过的同学可以尝试写一写再看):
class MyStack{
int[] elem;//使用数组来模拟栈
int usedSize;//栈中有多少元素
private static final int INIT = 10;//默认初始化10个
public MyStack(){
elem = new int[INIT];
}
//进栈
public int push(int val){}
//出栈
public int pop(){}
//得到栈顶元素,但不要出栈
public int peek(){}
//栈有多少元素-栈的大小
public int size(){}
//栈是否为空
public boolean empty(){}
//栈是否满了
public boolean isFull(){}
}
2.2 push(int val) - 进栈
public int push(int val){
if(isFull()){
elem = Arrays.copyOf(elem, elem.length*2);//扩容
}
elem[usedSize] = val;
usedSize++;
return elem[usedSize];
}
2.3 pop() - 出栈
public int pop(){
if(empty()){
System.out.println("栈中没有元素!");
return -1;
}
usedSize--;
return elem[usedSize];
}
2.4 peek() - 得到栈顶元素
public int peek(){
if(empty()){
System.out.println("栈中没有元素!");
return -1;
}
return elem[usedSize-1];
}
2.5 size() - 栈的大小
public int size(){
return usedSize;
}
2.6 empty()
public boolean empty(){
return 0 == usedSize;
}
2.7 isFull()
public boolean isFull(){
return elem.length == usedSize;
}
三,队列的概念及其结构
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的原则。 入队列:进行插入操作的一端称为队尾。 出队列:进行删除操作的一端称为队头。画个图来了解一下:
四,队列的方法及其实现
4.1队列
队列的初始化及其主要方法,使用双向链表实现,不了解双向链表的可以看看我之前写的文章:
public class MyQueue {
public static class ListNode{
ListNode next;
ListNode prev;
int val;
ListNode(int val){
this.val = val;
}
}
ListNode first;//队头
ListNode last;//队尾
int usedSize = 0;//队列的大小
//入队列
public void offer(int val){}
//出队列
public int poll(){}
//获得队头元素
public int peek(){}
}
4.2 offer(int val) - 入队列
public void offer(int val){
ListNode node = new ListNode(val);
if(first == null){//队列中没有元素
first = node;
}else{
last.next = node;
node.prev = last;
}
last = node;//更换队尾
usedSize++;
}
4.3 poll() - 出队列
public int poll(){
int value = -1;
if(first == null){
System.out.println("队列为空!");
return value;
}else if(first == last){//只有一个元素
value = first.val;
first = null;
last = null;
}else{
value = first.val;//存储队头元素
first = first.next;
first.prev.next = null;
first.prev = null;
}
return value;
}
4.4 peek() - 获得队头元素
public int peek(){
if(first == null){
System.out.println("队列为空!");
return -1;
}
return first.val;
}