三.线性表

线性表(List):零个或者多个数据元素的有限序列
有且只有一个直接前驱元素,有且只有一个直接后继
线性表元素的个数n(n>0)定义为线性表的长度,当n=0时,称为空表

在较复杂的线性表中,一个数据元素可以由若干个数据项组成

线性表的顺序顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素

一维数组来实现顺序存储结构.
数组的长度和线性表的长度的区别?
数组的长度是存放线性表存储空间的长度,存储分配后这个量一般是不变的.
线性表的长度是线性表中数据元素的个数,(插入/删除)这个量是变化的
在任何时刻,线性表的长度应该小于等于数组的长度

存储器中的每个存储单元都有自己的编号,这个编号称为地址

线性表顺序存储结构的优缺点:
优点:无需为表中元素之间的逻辑关系而增加额外的存储空间,可以快速的存取表中的任一位置的元素
缺点:插入和删除时需要移动表中大量的元素,当线性表长度变化较大时,难以确定存储空间的容量,造成存储空间的碎片

线性表的链式存储结构:为了表示每个数据元素ai和其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置).我们把存储数据元素的信息的区域成为数据域,把直接存储直接后继位置的域称为指针域.指针域中存储的信息称作指针或链.这两部分信息组成数据元素ai的存储映像,称为结点(Node)

n个结点链接成一个链表,即为线性表的链式存储结构.因为此链表的每个结点中只包含一个指针域,所以叫做单链表

头指针:链表中第一个结点的存储位置
头结点:在单链表的第一个结点前附设一个结点(为了方便对链表操作)
区别?
头指针是指链表指向第一个结点的指针,如果链表有头结点,则指向头结点的指针
头指针具有标识作用,所以常以头指针冠以链表的名字
无论链表是否为空,头指针都不为空,头指针是链表的必要元素

头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表长度)
有了头结点,对在第一个元素结点前插入结点和删除第一结点,其操作和其他结点的操作就统一了
头结点不一定是链表必须要素

单链表和顺序存储结构的区别:
存储分配方式:
顺序存储结构用一段连续的存储单元依次存储线性表的数据元素
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素

时间性能:
查找:顺序存储结构O(1)单链表O(n)
插入和删除:顺序存储结构需要平均移动一般的元素,时间为O(n)单链表在找出某位置的指针后,插入和删除时间仅为O(1)

空间性能:
顺序存储结构需要预分配存储空间,分大了浪费,分小了易发生上溢
单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制

静态链表:用数组描述的链表(游标实现法)

循环链表:将单链表的终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表

双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章