线性表的链式存储结构

来源:互联网 发布:一起牛软件下载 编辑:程序博客网 时间:2024/06/15 22:37

前言

顺序存储结构的缺点:插入和删除时需要移动大量元素
链式存储结构的特点:用一组任意的存储单元存储线性表的数据元素

数据结构 存储分配方式 时间性能 空间性能 顺序存储结构 用一段连续的存储单元一次存储线性表的数据元素 查找:O(1) 插入删除:O(n) 需要预分配存储空间,分大了浪费,分小了易发生上溢 单链表结构 用一组任意的存储单元存放线性表的元素 查找:O(n) 插入删除:O(1) 动态调整

思路

1、定义接口

package com.stucture.list;  /**  * 线性表顺序存储结构的接口  * 指的是用一段地址连续的存储单元一次存储线性表的数据元素  * @ClassName: ISqList   */  public interface IList<T> {      /**      * 获得元素      * @param loc 需要获得的第loc个元素      * @return       */      public T getElem(int loc);      /**      * 插入元素      * @param loc 元素的插入位置      * @param t 需要插入的元素      * @return  是否成功插入      */      public boolean insertElem(int loc, T t);      /**      * 删除元素      * @param i 需要删除元素的位置      * @return      */      public T deleteElem(int i);  }  

2、定义节点类

package com.stucture.list.linkList;  /**  * 链表中的结点  * @ClassName: Node   * @author 小学徒  * @date 2013-2-27  */  public class Node<T> {      private T data;       //需要存储的数据信息      private Node<T> next; //后继结点      public T getData() {          return data;      }      public void setData(T data) {          this.data = data;      }      public Node<T> getNext() {          return next;      }      public void setNext(Node<T> next) {          this.next = next;      }  }  

3、实现链表和基本操作

package com.stucture.list.linkList;  import com.stucture.list.IList;  /**  * 单链表  * @ClassName: LinkList   */  public class LinkList<T> implements IList<T>{      private Node<T> head; //链表的结点      private int length; //链表的长度      public LinkList(Node<T> head) {          this.head = head;      }      //获取元素      public T getElem(int loc) {          int j = 1;  //计数器          Node<T> n = head; //指向第一个结点          while(n != null) {  //n不为空时,循环继续寻找第loc个结点              if(j == loc) {  //找到第一个元素时返回                  return n.getData();              }              n = n.getNext();              j++;          }          return null;      }      //插入元素      public boolean insertElem(int loc, T t) {          if(length + 1 < loc) {              System.out.println("非法插入");              return false;          }          if(head == null && loc == 1) {  //当第一次插入的时候              head = new Node<T>(); //第一次使用,必须创建对象              head.setData(t);              length++;          } else if(head != null && loc == 1) {   //但不是第一次插入,但是插入的位置是第一个时              Node<T> tempNode = new Node<T>();   //生成一个新的结点              tempNode.setData(t);              tempNode.setNext(head);               head = tempNode;    //把头换成新插入的结点              length++;          } else {    //当不是第一次插入并且插入的不是第一个时              Node<T> n = this.head;              int j = 1;  //计数器              while(n != null && j < loc - 1) {                  n = n.getNext();                  j++;              }              Node<T> tempNode = new Node<T>();   //生成一个新的结点              tempNode.setData(t);              tempNode.setNext(n.getNext());  //将n的后继结点赋值给新的结点的后继              n.setNext(tempNode);              length++;          }          return true;      }      //删除元素      public T deleteElem(int loc) {          if(head == null || loc > length) {              System.out.println("非法删除");              return null;          }          T old;          if(head != null && loc == 1) {              old = head.getData();              head = head.getNext();          } else {              Node<T> n = this.head;              int j = 1;  //计数器              while(n != null && j < loc - 1) {                  n = n.getNext();                  j++;              }              old = n.getNext().getData();              n.setNext(n.getNext().getNext());          }          length--;          return old;      }      public Node<T> getHead() {          return head;      }      public void setHead(Node<T> head) {          this.head = head;      }      public int getLength() {          return length;      }      public void setLength(int length) {          this.length = length;      }  }  

参考

http://hjj20040849.iteye.com/blog/1816941

线性表的顺序存储结构:
http://blog.csdn.net/iamcgt/article/details/78622878

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办 空心墙打膨胀螺丝打不上怎么办 沉孔内六角螺丝滑丝怎么办 内六角螺丝滑了怎么办? 三色灯不变光了怎么办 卧室灯不变色了怎么办 圆柱齿轮减速机噪音大怎么办 轴与套间隙生锈怎么办 汽车停小区被刮怎么办 下楼梯摔跤了 屁股疼 怎么办 剧烈咳嗽震的肚子疼怎么办 饺子粘在盘子上怎么办 生饺子粘在盘子怎么办 饺子粘在案板上怎么办 饺子冷冻粘起了怎么办 冰箱饺子冻住了怎么办 水饺都冻一块了怎么办 wps卸载了后文件打不开怎么办 六角螺母拧滑了怎么办 梅花内六角螺丝扭滑丝了怎么办 眼镜螺丝滑丝了怎么办 大螺丝拆不下来怎么办 一字螺丝扭不动怎么办 带帽的螺丝拧花怎么办 螺丝拧不出来了怎么办 小六角螺丝滑丝怎么办 螺丝拧不下来了怎么办 固定水龙头的螺母扭不动怎么办 小螺丝帽拧花了怎么办