线性表 : 由零个或多个数据元素组成的有限序列;
特点 :
是一个序列,也就是说元素之间存在先后顺序;
若存在多个元素,则第一个元素无前驱,最后一个元素无后继,其他元素都有且只有一个前驱和后继;
线性表强调 有限的;
数学定义 : 若将线性表记为(a1,....ai-1,ai,ai+1,..an);则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素;
所以线性表的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表;
数据类型 : 指一组性质相同的值的集合及定义在此集合上的一些操作的总称;; 例; 浮点型,整形;
在c语言中,按照取值的不同,数据结构分为2类 :
原子类型 : 不可以再分解的基本类型;整形,浮点型;
结构类型 : 由若干个类型组合而成,是可以再分解的;例整形数组可以分解若干个整形;
抽象 : 是指抽取出事物具有的普遍性的本质;它要求抽取出问题的特征
抽象数据类型adt : 是指一个数据模型及定义在该模型上的一组操作;
线性表的顺序存储结构 : 指用一段地址连续的存储单元依次存储线性表的数据元素;
线性表的顺序存储结构,在存,读数据时,不管在哪儿位置,时间复杂度都是O(1);而在插入或者删除时,时间复杂度都是O(n);
优点 :
无须为表示表中元素之间的逻辑关系而增加额外的存储空间;
可以快速的存取表中的任意位置的元素;
缺点 :
插入和删除操作需要移动大量的元素;
当线性表长度变化较大时,难以确定存储空间的容量;
容易造成存储空间的"碎片";
线性表的链式存储结构 特点 : 用一组任意的单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置;
把存储数据元素信息的域称为数据域;把存储直接后继位置的域称为指针域;
指针域中存储的信息称为指针或链;这两部分信息组成数据元素称为存储映像,称为节点;
每个节点中只包含一个指针域,称为单链表;
头结点的数据域不存储任何信息,
头指针 : 指链表指向第一个节点的指针,若链表有头结点,则是指向头结点的指针;
头指针具有标识作用,常用头指针冠以链表的名称 ;(指针变量的名字)
无论链表是否为空,头指针均不为空;
头指针是链表的必要元素
头结点 : 为了操作的统一和方便而设立的,放在第一个元素的节点之前,其数据一般无意义(也可以用来存放链表的长度)
获取链表第i个数据的算法思路 :
声明一个节点p指向链表第一个节点,初始化j从1开始;
当j< i时,就遍历链表,让p的指针向后移动,不断指向下一个节点,j+1;
若到链表末尾p为空,则说明第i个元素不存在; 否则查找成功,返回节点p的数据;