数据结构 栈 (Java 语言 实现)
数据结构 栈
项目
代码
- 常见的 就是用 数组 去实现 栈
- 这里 也 用数组 去实现一下
使用数组 实现
package com.codervibe.ch02;
public class StackInArray<E> {
private int top;
private Object data[];
private int size;
public StackInArray(int size) {
this.data = new Object[size];
this.size = size;
this.top = -1;
}
public int getSize() {
return this.size;
}
public boolean isEmpty() {
return this.top == -1;
}
public boolean isPull() {
return this.top == size - 1;
}
public void push(E e) {
if (isPull()) {
System.out.println("栈 已满, 无法压栈");
}
data[++top]=e;
}
public E pop() throws Exception {
if (isEmpty()) {
System.out.println("栈 已空, 无法弹栈");
}
return (E)data[top--];
}
public void print() {
if(isEmpty()){
System.out.println("栈已空,无法输出");
}
for (int i = top; i >= 0; i--) {
System.out.println("data[" + i + "] = " + data[i]);
}
}
}
@Test
public void T1() throws Exception {
StackInArray<Integer> stringStackInArray =new StackInArray<>(9);
System.out.println("初始化已完成 检查 栈 是否为空 " + stringStackInArray.isEmpty());
stringStackInArray.push(1);
stringStackInArray.push(2);
stringStackInArray.push(3);
stringStackInArray.push(4);
stringStackInArray.push(5);
stringStackInArray.push(6);
stringStackInArray.push(7);
System.out.println("入栈以后的 栈的大小为" + stringStackInArray.getSize());
stringStackInArray.print();
System.out.println("出栈 并返回 出栈的元素 "+stringStackInArray.pop());
System.out.println("栈 当前的大小 为 " + stringStackInArray.getSize());
System.out.println("出栈 之后 打印 栈 中的所有元素");
stringStackInArray.print();
}
使用链表 实现
- 注意的是 代码中 的 链表类 是上一篇链表中的类 如果找不到可以去 上一篇 找
- 话不多说 直接上代码
package com.codervibe.ch02;
import com.codervibe.ch01.OneWayLinkList;
public class StackInLinkedList<T> {
private int top = -1;
private int MaxSize;
private OneWayLinkList<T> data;
public StackInLinkedList() {
data = new OneWayLinkList<>();
this.MaxSize =0;
}
public boolean isFull(){
return MaxSize == this.data.length;
}
public boolean isEmpty() {
return this.MaxSize == 0;
}
public void push(T value){
this.data.insert(value);
MaxSize++;
}
public T pop(){
if (isEmpty()) {
System.out.println("栈 为空 没有元素可以 出栈");
}
T oldValue = this.data.remove(MaxSize - 1);
MaxSize--;
return oldValue;
}
public T peek(){
if (isEmpty()) {
System.out.println("栈 为空 没有元素");
}
return this.data.get(MaxSize - 1);
}
public int size() {
return this.data.length;
}
}
@Test
public void T2(){
StackInLinkedList<String> stringStackInLinkedList =new StackInLinkedList<>();
System.out.println("初始化 栈 检查 栈 是否为空 "+stringStackInLinkedList.isEmpty());
stringStackInLinkedList.push("1111111");
stringStackInLinkedList.push("2222222");
stringStackInLinkedList.push("3333333");
stringStackInLinkedList.push("4444444");
stringStackInLinkedList.push("5555555");
System.out.println("入栈已完成 检查 栈 是否 已满 "+stringStackInLinkedList.isFull());
System.out.println("栈的大小 为 " + stringStackInLinkedList.size());
System.out.println("查看栈顶元素 "+stringStackInLinkedList.peek());
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
System.out.println("出栈 已完成 检查 栈是否 已为 空 "+stringStackInLinkedList.isEmpty());
}
完整的代码
package com.codervibe.ch02;
import com.codervibe.ch01.OneWayLinkList;
public class StackInLinkedList<T> {
private int top = -1;
private int MaxSize;
private OneWayLinkList<T> data;
public StackInLinkedList() {
data = new OneWayLinkList<>();
this.MaxSize =0;
}
public boolean isFull(){
return MaxSize == this.data.length;
}
public boolean isEmpty() {
return this.MaxSize == 0;
}
public void push(T value){
this.data.insert(value);
MaxSize++;
}
public T pop(){
if (isEmpty()) {
System.out.println("栈 为空 没有元素可以 出栈");
}
T oldValue = this.data.remove(MaxSize - 1);
MaxSize--;
return oldValue;
}
public T peek(){
if (isEmpty()) {
System.out.println("栈 为空 没有元素");
}
return this.data.get(MaxSize - 1);
}
public int size() {
return this.data.length;
}
}
package com.codervibe.ch02;
import org.junit.Test;
import java.util.Stack;
public class StackTest {
@Test
public void T1() throws Exception {
StackInArray<Integer> stringStackInArray =new StackInArray<>(9);
System.out.println("初始化已完成 检查 栈 是否为空 " + stringStackInArray.isEmpty());
stringStackInArray.push(1);
stringStackInArray.push(2);
stringStackInArray.push(3);
stringStackInArray.push(4);
stringStackInArray.push(5);
stringStackInArray.push(6);
stringStackInArray.push(7);
System.out.println("入栈以后的 栈的大小为" + stringStackInArray.getSize());
stringStackInArray.print();
System.out.println("出栈 并返回 出栈的元素 "+stringStackInArray.pop());
System.out.println("栈 当前的大小 为 " + stringStackInArray.getSize());
System.out.println("出栈 之后 打印 栈 中的所有元素");
stringStackInArray.print();
}
@Test
public void T2(){
StackInLinkedList<String> stringStackInLinkedList =new StackInLinkedList<>();
System.out.println("初始化 栈 检查 栈 是否为空 "+stringStackInLinkedList.isEmpty());
stringStackInLinkedList.push("1111111");
stringStackInLinkedList.push("2222222");
stringStackInLinkedList.push("3333333");
stringStackInLinkedList.push("4444444");
stringStackInLinkedList.push("5555555");
System.out.println("入栈已完成 检查 栈 是否 已满 "+stringStackInLinkedList.isFull());
System.out.println("栈的大小 为 " + stringStackInLinkedList.size());
System.out.println("查看栈顶元素 "+stringStackInLinkedList.peek());
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
stringStackInLinkedList.pop();
System.out.println("出栈 已完成 检查 栈是否 已为 空 "+stringStackInLinkedList.isEmpty());
}
@Test
public void T3(){
Stack<String> stringStack =new Stack<>();
System.out.println("初始化栈 栈 是否 为空 " + stringStack.isEmpty());
stringStack.push("1");
stringStack.push("2");
stringStack.push("3");
stringStack.push("4");
System.out.println("入栈 已完成 栈 是否 为空 " + stringStack.isEmpty());
System.out.println("stringStack.size() = " + stringStack.size());
}
}