【数据结构】单链表的插入与删除
2017-07-15 10:38
344 查看
1.链接存储结构的定义
在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).
它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点.
链式存储结构又分为单链表、双链表、循环链表。
2.链式存储结构的特点
比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。
逻辑上相邻的节点物理上不必相邻。
每个结点是由数据域和指针域组成。
3.单链表的插入与删除
插入图解
删除图解
代码实现
输出结果
4.链式存储结构的优缺点
优点
插入、删除开销小(不必移动节点,只要改变节点中的指针)。
缺点
查找结点时链式存储要比顺序存储慢。
本人才疏学浅,若有错,请指出
谢谢 !
在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).
它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点.
链式存储结构又分为单链表、双链表、循环链表。
2.链式存储结构的特点
比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。
逻辑上相邻的节点物理上不必相邻。
每个结点是由数据域和指针域组成。
3.单链表的插入与删除
插入图解
删除图解
代码实现
public class SingleLinked { private class Node{ public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } private int data; private Node next; 4000 public Node(int data,Node next){ this.data = data; this.next = next; } } private Node head; //插入 public void insert (int data){ Node node = new Node(data,null); if (null == this.head){ this.head = node; return; } //若插入节点小于头节点,则设置新插入节点为头节点 if (head.getData() > data){ node.setNext(this.head); this.head = node; return; } //记录头节点位置 Node p = head; //从头节点开始寻找大于data的位置 while(null != p.getNext()){ if (p.getNext().getData() > data){ break; } //下一个节点 p = p.getNext(); } //插入节点 node.setNext(p.getNext()); p.setNext(node); } //删除 public void remove(int data){ if (null == this.head ){ System.out.println("链表为空!"); return; } if (this.head.getData() == data){ this.head = this.head.getNext(); return; } Node p = this.head; while(null != p.getNext()){ if (p.getNext().getData() == data){ break; } p = p.getNext(); } if (null != p.getNext()){ p.setNext(p.getNext().getNext()); print(); }else{ System.out.println(data + " 不存在!"); } } //输出链表元素 public void print(){ if (null == this.head){ return; } Node p = this.head; while(null != p){ System.out.println(p.getData()+" "); p = p.getNext(); } } //链表逆序 public void reverseLinkList() { if (head == null || head.getNext() == null) { return ; } else { Node temp = null; Node p = head; while (head != null) { p = head.getNext(); head.setNext(temp); temp = head; head = p; } head = temp; } } //判断是否为循环链表 public boolean isCircle(){ Node fast = head; Node slow = head; if (head == null || head.getNext() == null){ return false; } while(null != head){ fast = fast.getNext().getNext(); slow = slow.getNext(); if (fast == slow){ break; }else if (fast == null || fast.getNext() == null){ return false; } } return true; } public static void main(String[] args) { SingleLinked list = new SingleLinked(); list.insert(5); list.insert(3); list.insert(1); list.insert(4); list.print(); System.out.println("删除后------"); list.remove(3); list.reverseLinkList(); System.out.println("逆序-------"); list.print(); System.out.println("是否有环---"+list.isCircle()); } }
输出结果
1 3 4 5 删除后------ 1 4 5 逆序------- 5 4 1 是否有环---false
4.链式存储结构的优缺点
优点
插入、删除开销小(不必移动节点,只要改变节点中的指针)。
缺点
查找结点时链式存储要比顺序存储慢。
本人才疏学浅,若有错,请指出
谢谢 !
相关文章推荐
- 【数据结构】单链表的建立,测长,打印,删除,插入, 排序, 逆置
- 数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并
- 数据结构:程序加图示分析单链表的插入和删除操作
- 数据结构-单链表的读取,插入与删除
- 【数据结构】单链表(一)单链表的定义,插入,删除和查找操作
- C语言之数据结构的顺序单链表创建,插入和删除操作
- 数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作
- 数据结构(三)——单链表的插入与删除
- 数据结构之顺序表的创建、插入、删除、定位
- 算法学习-数据结构之链表操作,创建,插入,删除,查找。
- 编程内功修炼之数据结构—BTree(二)实现BTree插入、查询、删除操作
- 数据结构——树(8)——二叉搜索树的插入和删除操作
- 程序员面试宝典之数据结构基础----②单链表删除节点(读后)
- 数据结构之顺序表,插入,删除等
- 数据结构之 双链表的创建,删除,插入
- 结构之美:删除单链表指定位置的数据
- 【数据结构】顺序线性表的插入、删除、合并实现
- 数据结构之线性表的顺序结构操作2-(删除,插入,查值等)
- 数据结构之线性表的顺序存储结构(数组)的插入与删除
- 数据结构之单链表(尾插法)查找、插入和删除