数据结构——链栈

来源:互联网 发布:右肩膀酸痛 知乎 编辑:程序博客网 时间:2024/06/18 06:24

Java实现的链栈数据结构

LinkNode(节点)—封装—>LinkList(链表)—封装—>LinkStack(链栈)


基本的数据单元 节点

LinkNode.java

/** * 链表的核心,节点 *  * @author mingwei *  */public class LinkNode {/** * 用来存储节点要存储的数据 */Object mData;/** * 用来指向当前节点的下一个节点 */LinkNode mNext;/** * 节点的构造方法 *  * @param data *            节点存储的数据 */public LinkNode(Object data) {mData = data;}}

链表结构,从头部插入和删除节点

/** * 链表,有一个头结点 *  * 在链表的头部插入一个节点的方法 ->addHeadNode *  * 删除链表头部的一个节点的方法->removeHeadNode *  * @author mingwei *  */public class LinkList {/** * 链表的名字 */String mName;/** * 头结点 */LinkNode mHeadNode;/** * 构造方法,传入链表的名字 *  * @param name */public LinkList(String name) {mName = name;}/** * 添加一个头结点的 *  * 步骤: *  * 1.创建一个节点 *  * 2.把原来头结点赋值到创建的这个节点的next上 *  * 3.头节点引用指向这个新假如的新节点 *  * @param data *            添加的新节点的数据 */public void addHead(Object data) {LinkNode node = new LinkNode(data);node.mNext = mHeadNode;mHeadNode = node;}/** * 移除一个头结点 *  * 步骤: *  * 1.头结点赋值给一个临时的节点 *  * 2.头结点引用指向的节点向后挪一位,其实上一个节点并没有删除,上一个节点还存在,只是链表的特殊性从前往后找, * 这样一来头结点前面的节点就已经无法在找到了 *  * @return */public Object removeHead() {if (mHeadNode == null) {throw new IndexOutOfBoundsException(mName + "'s headnode is null");}LinkNode temp = mHeadNode;mHeadNode = mHeadNode.mNext;return temp.mData;}/** * 打印当前的链表 *  * 步骤:从头结点循环打印链表的所有数据 */public void printLinkList() {if (mHeadNode == null) {System.out.println(mName + "=linklist is null");return;}LinkNode node = mHeadNode;System.out.print(mName + "=");while (node != null) {System.out.print(node.mData + "|");node = node.mNext;}System.out.print("\n");}}


链栈结构,push压栈和pop出栈操作
/** * 使用链表实现一个链栈 *  * push 压栈 *  * pop 出栈 *  * @author mingwei *  */public class LinkStack {/** * 存储链栈的所有数据,以链表的形式 */LinkList mLinkList = new LinkList("链栈");/** * 入栈 */public void push(Object node) {mLinkList.addHead(node);}/** * 出栈 *  * @return 当前移除的栈 */public Object pop() {return mLinkList.removeHead();}/** * 打印链表 */public void printStack() {mLinkList.printLinkList();}}

使用:

public class Test {public static void main(String[] args) {LinkStack stack = new LinkStack();stack.push("a");stack.push("b");stack.push("a");stack.printStack();stack.pop();stack.printStack();}}
结果:

链栈=a|b|a|链栈=b|a|



0 0
原创粉丝点击