赞
踩
public class ArrayStackDemo { public static void main(String[] args) { ArrayStack arrayStack = new ArrayStack(5); //显示栈内容 arrayStack.show(); //添加 arrayStack.push(1); arrayStack.push(2); arrayStack.push(3); arrayStack.push(4); arrayStack.push(5); arrayStack.push(6); //显示栈内容 System.out.println("添加值后的栈信息"); arrayStack.show(); //取出栈内容 int stackPop = arrayStack.pop(); System.out.println("取出的值为:"+stackPop); int stackPop2 = arrayStack.pop(); System.out.println("取出的值为:"+stackPop2); //显示栈内容 System.out.println("取出值后的栈信息"); arrayStack.show(); } } // 定义一个栈,用数组实现 class ArrayStack{ //栈大小 private int maxSize; //定义一个数组用于模拟栈 private int[] stack; //定义栈顶为top,默认为-1 private int top = -1; //创建栈需要定义栈大小 public ArrayStack(int maxSize){ this.maxSize = maxSize; this.stack = new int[this.maxSize]; } // 判断栈空 public boolean isEmpty(){ return this.top == -1; } //判断栈满 public boolean isFull(){ return top == maxSize - 1; } //入栈 public void push(int value){ //判断是否栈满 if(isFull()){ System.out.println("栈已满!"); return; } //将栈顶指针前进一位 top++; //向栈中添加输入 stack[top] = value; } //出栈 public int pop(){ //判断当前栈是否为空 if(isEmpty()){ System.out.println("当前栈空"); throw new RuntimeException("当前栈无数据,不可出栈"); } //将当前栈顶指向的数据存起来 int value = stack[top]; //栈顶后移一位 top--; //将取得的数据返回 return value; } //显示栈 public void show(){ //判断当前栈是否为空 if(isEmpty()){ System.out.println("当前栈空"); return; } for (int i = top;i >= 0;i--){ System.out.printf("stack[%d]=%d\n",i,stack[i]); } } }
public class LinkedListStackDemo { public static void main(String[] args) { LinkedListStack linkedListStack = new LinkedListStack(5); //显示栈内容 linkedListStack.show(); //添加 linkedListStack.push(1); linkedListStack.push(2); linkedListStack.push(3); linkedListStack.push(4); linkedListStack.push(5); linkedListStack.push(6); //显示栈内容 System.out.println("添加值后的栈信息"); linkedListStack.show(); //取出栈内容 int stackPop = linkedListStack.pop(); System.out.println("取出的值为:"+stackPop); int stackPop2 = linkedListStack.pop(); System.out.println("取出的值为:"+stackPop2); //显示栈内容 System.out.println("取出值后的栈信息"); linkedListStack.show(); } } //用单向链表实现栈 class LinkedListStack { //栈大小 private int maxSize; //定义一个节点用于当作头节点 private Node first = new Node(-1); //定义栈顶为top,默认指向first private Node top = first; //创建栈需要定义栈大小 public LinkedListStack(int maxSize){ this.maxSize = maxSize; } //判断当前栈中有效节点,从头节点的下一个开始到top栈顶为有效节点 public int size(){ //判断有没有有效节点 if(first.next == null){ return 0; } int size = 0; //创建临时指针用于计算节点数量 Node temp = first.next; while (true){ size++; //当前指针指向栈顶时退出 if(temp == top){ break; } temp = temp.next; } return size; } // 判断栈空 public boolean isEmpty(){ return size() == 0; } //判断栈满 public boolean isFull(){ return size() == maxSize; } //入栈 public void push(int value){ //判断是否栈满 if(isFull()){ System.out.println("栈已满!"); return; } //创建对象 Node node = new Node(value); //将新对象添加到栈中 top.next = node; //将栈顶指针前进至新对象 top = node; } //出栈 public int pop(){ //判断当前栈是否为空 if(isEmpty()){ System.out.println("当前栈空"); throw new RuntimeException("当前栈无数据,不可出栈"); } //将当前栈顶指向的数据存起来 int value = top.number; //栈顶前移一位 //创建临时指针 Node temp = first; while (true){ //找栈顶 //temp.next指向top,说明temp是要出栈的前一个节点,将该节点当作栈顶 if(temp.next == top){ top = temp; break; } //后移指针 temp = temp.next; } //将取得的数据返回 return value; } //显示栈,从栈顶开始显示 public void show(){ //判断当前栈是否为空 if(isEmpty()){ System.out.println("当前栈空"); return; } //创建临时指针 Node temp; //循环栈当前实际大小次 for (int i = size(); i >= 0; i--) { //每次临时指针都从头开始 temp = first; //打印最后一个元素 for (int j = 0; j < i; j++) { temp = temp.next; if(j == i-1){ System.out.printf("stack[%d]=%d\n", j, temp.number); } } } } } class Node { int number; Node next; public Node(int number) { this.number = number; } @Override public String toString() { return "Node{number=" + this.number + "}"; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。