1.顺序表
1.1顺序表定义
它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。(本质就是地址相邻的线性表)
1.2 顺序表的插入,删除,查找和清空
2. 链表
2.1 链表定义
链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列结点(链表每一个元素称为结点)组成,结点可以在运行时动态生成。(本质,每个结点储存下一个结点的地址,物理结构不相邻)
2.2 链表的分类
2.2.1 单链表
指的是链表中的元素的指向只能指向链表中的下一个元素或者为空,元素之间不能相互指向
2.2.2 双向链表
每个链表元素既有指向下一个元素的指针,又有指向前一个元素的指针,其中每个结点都有两种指针
2.2.3 循环链表
的是在单向链表和双向链表的基础上,将两种链表的最后一个结点指向第一个结点从而实现循环。
2.3 链表的应用举例
2.3.1 单链表的增加,插入,修改和删除
typedef struct 声明一个具有别名(LNode)的结构体,结构体由 data 等元素以及指针(指向下一个结构体),同时声明连接指针 *LinkList 以及 结构体指针 *NodePtr。 malloc申请空间,返回地址,tempHeader指向头节点,通过该指针完成头节点的初始化。 从头节点开始,通过指针访问下一个节点。while 循环控制实现。先使用 malloc()申请内存空间,将元素添加到此节点,然后将此节点的 *next 指针指向 NUll ,最后将该节点的地址传递给上一个节点的 *next 。 每次检查节点的下一个节点是否存在所需删除的元素,当存在时,连接这个节点和删除元素的下一个节点,并释放删除元素对应的内存空间。
2.3.2 单链表实现多项式相加
通过链表储存多项式,链表数据域包括系数(coefficient)和指数(exponent),链表每个节点代表多项式中每一项。实现多项式的加法首先要满足每个多项式都按照相同的排列顺序依次排列,可以通过在初始化多项式时,使用循环控制实现(以从大到小为例),循环遍历多项式,找到比插入项指数小的第一项,将插入项连接在其后面。
对于已经排列好的两个多项式A,B,实现A ,B相加,可以再创建一个C链表,将合并后结果放在C链表中。A,B多项式合成分为三种情况,第一种:A的指数大于B的指数。pa指向A项,pb指向B项,将A连接到C,pa指向A下一项,pb保持不变。第二种:A的指数小于B的指数。将B连接到C,pb指向B的下一项,pa保持不变。第三种:A,B指数相同,如果系数之和为0,不做连接,否则将系数相加后连接到C。若A,B两个多项式项数不一致,当pa或者pb为NULL时,把不为NULL的连接到C即可。