几种常见的数据结构的java实现

常见的数据结构有  栈  队列  链表  二叉树 

栈 :先进先出

队列:先进后出

对数据结构的操作常见的有  增 删 改 查

下面分别介绍这几种数据结构的实现方式:

1)栈   Stack

栈可以用数组实现也可以用列表实现,两种方式均有top变量来标识栈顶,maxSize来标识栈的最大容量,栈的常见方法为push  pop  peek  isEmpty  isFull(通过top  和 maxSize来判断)

栈的数组实现:


栈的链表实现:


对于队列而言是先进先出,故有两个指针(位置的标识)来分别对队头和队尾进行标识,从队头删除元素,从队尾增加元素,为了避免队列不满而不能插入新的数据项,可以让队尾增加到足够多的元素时回到队头,这称为循环队列。

队列数组的实现:


链表分为单向链表、双向链表和循环链表,本文介绍了双向链表和循环链表的实现

双向链表:




在链表的实现类里定义了节点的内部类,双向链表的属性里有链表头和链表尾,往链表中增加元素时一定要判断链表头是否为空。

由于增加元素、删除元素、改变元素均涉及到对下标index的引用,故在方法的开头必须对index的值进行检查,故在链表的实现类里面封装了checkIndex函数。

下面是循环链表的实现类,循环链表属性里只有链表头,链表尾的下一个节点指向链表头,链表尾是链表头的上一个节点,故增加元素是在链表头和链表头的上一个元素之间增加元素。





  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
/* * 基于链表实现树结构 */ package dsa; public class TreeLinkedList implements Tree { private Object element;//树根节点 private TreeLinkedList parent, firstChild, nextSibling;//父亲、长子及最大的弟弟 //(单节点树)构造方法 public TreeLinkedList() { this(null, null, null, null); } //构造方法 public TreeLinkedList(Object e, TreeLinkedList p, TreeLinkedList c, TreeLinkedList s) { element = e; parent = p; firstChild = c; nextSibling = s; } /*---------- Tree接口中各方法的实现 ----------*/ //返回当前节点中存放的对象 public Object getElem() { return element; } //将对象obj存入当前节点,并返回此前的内容 public Object setElem(Object obj) { Object bak = element; element = obj; return bak; } //返回当前节点的父节点;对于根节点,返回null public TreeLinkedList getParent() { return parent; } //返回当前节点的长子;若没有孩子,则返回null public TreeLinkedList getFirstChild() { return firstChild; } //返回当前节点的最大弟弟;若没有弟弟,则返回null public TreeLinkedList getNextSibling() { return nextSibling; } //返回当前节点后代元素的数目,即以当前节点为根的子树的规模 public int getSize() { int size = 1;//当前节点也是自己的后代 TreeLinkedList subtree = firstChild;//从长子开始 while (null != subtree) {//依次 size += subtree.getSize();//累加 subtree = subtree.getNextSibling();//所有孩子的后代数目 } return size;//即可得到当前节点的后代总数 } //返回当前节点的高度 public int getHeight() { int height = -1; TreeLinkedList subtree = firstChild;//从长子开始 while (null != subtree) {//依次 height = Math.max(height, subtree.getHeight());//在所有孩子中取最大高度 subtree = subtree.getNextSibling(); } return height+1;//即可得到当前节点的高度 } //返回当前节点的深度 public int getDepth() { int depth = 0; TreeLinkedList p = parent;//从父亲开始 while (null != p) {//依次 depth++; p = p.getParent();//访问各个真祖先 } return depth;//真祖先的数目,即为当前节点的深度 } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值