1. 线性表的链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,这就意味着这些数据元素可以存在内存未被占用的任意位置。
2. 结点:结点由存放数据元素的数据域和存放后继结点地址的指针域组成。
1.)顺序存储结构中,每个数据元素只需要存数据元素的信息就可以了。
2.)链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址。
3.)链表中第一个结点叫头结点,它的存储位置叫做头指针,它的数据域可以不存储任何信息,链表的最后一个结点指针为空。
3. Java实现单链表:
// 单向链表
public class SingleLinkedList<E> {
private Node<E> head; // 头结点
private int size; // 链表长度
// 建立一个空链表
public SingleLinkedList() {
head = null;
size = 0;
}
// 在链表尾部插入
public boolean add(E data){
Node<E> newNode = new Node<E>(data);
if(isEmpty()){
head = newNode;
}else{
Node<E> tail = get(size);
tail.setNext(newNode);
}
size++;
return true;
}
// 插入指定位置的结点
public boolean insert(int position, E data) {
if(position >= 1 && (position <= size + 1)){
Node<E> newNode = new Node<E>(data);
if(isEmpty() || position == 1){ // 链表为空或在头结点前插入
newNode.setNext(head);
head = newNode;
}else{ // 在中间位置插入
Node<E> preNode = get(position - 1); // 获取position的前一结点
Node<E> originalNode = preNode.getNext(); // 获取未插入结点时position位置对应结点
preNode.setNext(newNode);
newNode.setNext(originalNode);
}
size++;
return true;
}
return false;
}
// 删除指定位置的结点
public E delete(int position) {
E result = null;
if(position >= 1 && position <= size){
if(position == 1){ // 删除头结点
result = head.getData();
Node<E> afterHead = head.getNext();
head = afterHead;
}else{ // 删除其他结点
Node<E> preNode = get(position - 1); // 获取待删除结点的前一结点
Node<E> curNode = preNode.getNext(); // 获取待删除结点
result = curNode.getData();
preNode.setNext(curNode.getNext()); // 将待删除结点前一结点指向待删除结点下一结点
}
size--;
}
return result;
}
// 获取某个位置的结点
public Node<E> get(int position){
Node<E> targetNode = null;
if(!isEmpty() && position >= 1 && position <= size){
targetNode = head;
for(int i = 1; i < position ; i++){
targetNode = targetNode.getNext(); // 循环获取对应位置的结点
}
}
return targetNode;
}
// 获取链表的长度
public int getSize(){
return size;
}
// 判断链表是否为空
public boolean isEmpty(){
return size == 0;
}
// 打印链表数据
public void display(){
Node<E> node = head;
System.out.print("单链表: ");
for(int i = 0; i < size; i++){
System.out.print(" " + node.getData());
node = node.getNext();
}
System.out.println("");
}
}
// 结点类,包含结点的数据和指向下一个节点的引用
public class Node<E> {
private E data; // 数据域
private Node<E> next; // 指针域保存着下一节点的引用
public Node() {
}
public Node(E data) {
this.data = data;
}
public Node(E data,Node<E> next) {
this.data = data;
this.next = next;
}
public void setNext(Node<E> next) {
this.next = next;
}
public Node<E> getNext() {
return next;
}
public E getData() {
return data;
}
public void setData(E data) {
this.data = data;
}
@Override
public String toString() {
return "" + data;
}
}
// 测试类
public class Main {
public static void main(String[] args) {
SingleLinkedList<Integer> circular = new SingleLinkedList<Integer>();
circular.add(1);
circular.add(2);
circular.add(3);
circular.insert(4,4);
circular.insert(5,5);
circular.insert(6,6);
circular.delete(3);
circular.delete(5);
circular.display();
System.out.println("链表的长度为: " + circular.getSize());
}
}
4. 单链表结构和顺序存储结构优缺点:
1.)若线性表需要频繁查找,很少进行插入和删除操作,宜采用顺序存储结构,若需要频繁插入和删除时,宜采用单链表结构。
2.)当线性表的元素个数变化较大或者根本就不知道多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。单链表所占大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成。
分享到:
相关推荐
数据结构_线性表的链式存储 实验目的 1. 掌握线性表的链式存储结构。 2. 能熟练地利用链式存储结构实现线性表的基本操作。 3. 能熟练地掌握链式存储结构中算法的实现。 实验内容 1. 分别用头插法和尾插法建立带头...
数据结构:线性表(链接存储).ppt
数据结构:线性表(顺序存储).ppt
数据结构实验报告2线性表的链式存储结构.pdf
利用C++实现以下经典数据结构与算法:线性表(顺序表、链表、静态链表、三元组)、栈(双栈、共享栈)、队列(任务调度、循环队列、双向队列、链队列)、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法...
数据结构 C语言版 线性表的链式存储 数据结构 C语言版 线性表的链式存储
实验项目:线性表的链式存储结构与应用 实验题目:一元多项式计算器 实验内容: 设计线性表的动态或者静态链式存储结构,并实现一个一元多项式的计算器。 实验要求: 以动态或者静态链表存储一元多项式,在此基础上...
数据结构与算法:线性表的题库
线性表是一种最简单、最常用的数据结构。 如:到银行取钱时排队;学生花名册;书目顺序……所谓线性是指:在数据元素的非空有限集合中:1、存在唯一的一个被称做“第一个”的数据元素。 2、存在唯一的一个被称做...
数据结构: 线性表讲解实例。针对线性表的深入讲解。
数据结构:线性表求一元多项式的值,用C++实现
数据结构教学课件:线性表链表.ppt
实验一:线性表的存储结构定义及基本操作
数据结构线性表的链式存储结构,使用c语言完成。线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。
线性表的链式存储结构.doc 线性表的链式存储结构.doc 线性表的链式存储结构.doc
数据结构教学课件:线性表顺序表.ppt
给定两个链表,实现他们的递增排序 LA[4]={3,5,8,11}; LB[8]={2,6,8,9,11,15,20};得到LC={2,3,5,6,8,9,11,15,20}
实验二 线性表的链式存储结构 题目:设计并实现以下算法:给出用单链表存储多项式的结构,利用后接法生成多项式的单链表结构,实现两个多项式相加的运算,并就地逆置相加后的多项式链式。1. 用户可以根据自己的需求...
该文档饱含了数据结构课程中关于线性表的十二个基本操作的实现。对于不同的线性表的存储结构,利用C语言分别实现相应的算法