JAVA(数据结构和算法)一 栈和队列
栈
- 栈是java中一种数据结构的存储方式常用与JVM内存模型中的使用
- 下面一个图片来解释栈的操作
- 栈存储数据方式 为 先进后出 在JAVA中栈的实现有基于数组实现和基于链表实现下面为一个数组实现:
public class Test1 {
public static void main(String[] args) {
MyStack<Integer> stack = new MyStack<Integer>();
System.out.println(stack.push(1));
System.out.println(stack.push(2));
System.out.println(stack.push(3));
System.out.println(stack.push(4));
System.out.println(stack.push(5));
System.out.println(stack.size());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
stack.peek();
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
class MyStack<T>{
//栈顶的下标
private int top;
//当前元素的下标
private int peek;
//容器大小
private int size;
//存放栈的容器
private Object obj[];
//初始化
public MyStack() {
//创建一个栈时 栈顶一般默认为-1
top = -1;
size = 0;
peek = -1;
obj = new Object[10];
}
//入栈
public boolean push(T element) {
if(size == obj.length) {
return false;
}
obj[++top]=element;
peek++;
size++;
return true;
}
//出栈
public T pop() {
if(size == 0) {
return null;
}
Object object = obj[top--];
peek--;
size--;
return (T)object;
}
//当前指向的元素
public void peek() {
if(peek != -1) {
System.out.println(obj[peek]);
}else {
System.out.println("栈中元素为空请填入元素");
}
}
//当前栈里元素的大小
public int size() {
return size;
}
}
运行结果如下:
true
true
true
true
true
5
5
4
3
2
1
1
null
队列
- 队列是java中数据结构的一种存储数据的方式
- 下面一张图来解释队列的操作:
- 队列的操作一般由 队头 队尾组成 队头用于指向初始遍历的位置 而队尾用于指向最后一条元素 队列跟栈一样有基于 数组的实现和链表的实现下面为数组实现的代码:
public class Test1 {
public static void main(String[] args) {
Queue<Integer> q= new Queue<Integer>();
System.out.println(q.add(1));
System.out.println(q.add(2));
System.out.println(q.add(3));
System.out.println(q.add(4));
System.out.println(q.add(5));
System.out.println(q.size());
System.out.println(q.out());
System.out.println(q.out());
System.out.println(q.out());
System.out.println(q.out());
System.out.println(q.out());
System.out.println(q.out());
}
}
class Queue<T>{
//队头
private int head;
//队尾
private int tail;
//容器长度
private int size;
//容器
private Object obj[];
//初始化
public Queue() {
head = -1;
tail = 0;
size = 0;
obj = new Object[10];
}
public boolean add(T element) {
if(size == obj.length) {
return false;
}
obj[tail++] = element;
size++;
return true;
}
//出队
public T out() {
if(size == 0) {
return null;
}
if(head+1 == tail) {
return null;
}
Object object = obj[++head];
size--;
return (T)object;
}
public int size() {
return size;
}
}
代码执行结果:
true
true
true
true
true
5
1
2
3
4
5
null