线性表的定义
线性表(List):由零个或者多个数据元素组成的有限序列。个数n定义为线性表的长度,n=0时,称为空表。
特点:
1、 是一个序列,有先来后到;
2、 如果存在多个元素,第一个元素无前驱,最后一个无后继,其他的有且只有一个前驱和后继;
3、 线性表是有限的;
数据类型和抽象数据类型
数据类型:一组性质相同的值的集合以及定义在此集合上的一些操作的总称。
c语言中,数据类型分为原子类型(整型,浮点型,字符型)和结构类型(例如数组等)。
抽象数据类型:指一个数学模型以及定义在该模型上的一组操作。
ADT抽象数据类型名
Data 数据元素之间的逻辑关系的定义
Operation 操作,包括InitList,ListEmpty,ClearList,GetElem,LocateElem等。
endADT
顺序存储结构
顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。
物理存储结构:在内存中找个初始地址,通过占位的形式,把一定的内存空间给占了。(第一个位置很重要)
顺序存储结构的代码
顺序存储结构的三个属性
1、 存储空间的起始位置;2.线性表的最大存储容量;3.线性表的长度;
优点:
1、 无需为表示表中元素之间的逻辑关系而额外增加的存储空间;
2、 可以快速的存储表中任意位置的元素;
缺点:
3、 插入和删除操作需要移动大量元素;
4、 线性表长度变化较大时,难以确定存储空间的容量;
5、 容易造成存储空间的碎片;
链式存储结构
链式存储结构:每个数据元素除了存储元素信息外,还有存储后继元素的存储地址。存储数据元素信息的域称为数据域,存后继位置的称为指针域,这两部分称为存储映像,称为节点(Node)。
单链表
头指针与头节点的异同
头指针:指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。
1、 头指针具有标识作用,常用头指针冠以链表的名字(指针变量的名字);
2、 无论链表是否为空,头指针均不为空;
3、 头指针时链表的必要元素;
头结点:为了操作的统一和方便设立的,放在第一个元素的结点之前,数据域一般无意义(或存放链表的长度)
4、 有了头结点,对第一元素结点前插入结点和删除第一结点起操作与其他结点的操作就统一了;
5、 头结点不一定是必须元素;