今天搞了一上午,终于用JAVA实现了栈,包括入栈、出栈、返回栈顶值、打印栈中的数据都实现了。现在感觉用JAVA实现数据结构是一件很美妙的事情。以前都是看c语言描述的数据结构教材。虽然理解了,但是实现起来一直无从下手(我的C很烂,哈哈)。最近突发奇想用JAVA写,果然得心应手。终于有点小进步了。
话不多说,下面贴出代码:
实现接口:
package com.guobing.stack; @SuppressWarnings("hiding") public interface Stack_Interface<Object> { public void initStack(); //这个方法貌似可以不要,后面再看看 public void push(Object obj); //向栈顶插入一个元素 public boolean isEmpty(); //判断是否为空 public Object peek(); //返回栈顶元素的值 public Object pop(); //从栈中删除栈顶元素并返回 public void clear(); //清除栈中的所有元素使之成为一个空栈 public void print(); //打印栈中的元素 }
实现接口:
package com.guobing.stack; /** * @topic 栈的链表实现 * @author guobbing * @version 1.1 * @since 12:33 */ public class LinkedStack implements Stack_Interface{ private Node top; //定义栈顶指针 /** * 清除栈中的元素,使之成为空栈 */ @Override public void clear() { top = null; } /** * 初始化栈 */ @Override public void initStack() { top = null; } /** * 判断栈是否为空 */ @Override public boolean isEmpty() { // TODO Auto-generated method stub return top == null; } /** * 得到栈顶元素并返回 */ @Override public Object peek() { if(top == null) { System.out.println("栈为空"); return null; } System.out.println("当前栈顶元素的值为:" + top.element); return top.element; } /** * 删除栈顶元素并返回 */ @Override public Object pop() { if(top == null) { System.out.println("空指针"); return null; } else { Node p = top; //定义一个p来保存栈顶指针 System.out.println("删除了栈顶元素" + top.element); top = top.next; //指向下一个,原来栈顶的引用丢失,等待被回收内存 return p.element; } //当栈顶元素为空时,返回空指针 } /** * 打印栈中的元素 */ @Override public void print() { Node p = top; while(p != null) { System.out.println(p.element); p = p.next; } } @Override public void push(Object obj) { top = new Node(obj, top); } //测试 public static void main(String [] args) { LinkedStack ls = new LinkedStack(); ls.initStack(); ls.push("a"); ls.push("b"); ls.push("c"); ls.push("d"); ls.push("e"); ls.push("f"); ls.peek(); //得到栈顶元素 System.out.println("当前栈中元素为:"); ls.print(); //打印栈中的元素 System.out.println("删除栈顶元素后:"); if(!ls.isEmpty()) { ls.pop(); //删除栈顶元素 ls.peek(); ls.print(); } System.out.println("清空栈之后:"); ls.clear(); //清空栈 ls.peek(); } } /** * 定义每个链表块 * @author guob * */ class Node { Object element; Node next; public Node(Node nt) { //两种构造方法 next = nt; } public Node(Object obj, Node nt) { //相当于在头结点处插入数据 element = obj; next = nt; } }
测试结果:
当前栈顶元素的值为:f 当前栈中元素为: f e d c b a 删除栈顶元素后: 删除了栈顶元素f 当前栈顶元素的值为:e e d c b a 清空栈之后: 栈为空