线性表代码实战:
线性表的顺序存储结构具体实现 代码实战 赛博图书馆搭建指南(使用C\C++语言)_Shawn·Bing的博客-CSDN博客
目录
2.1 线性表及其实现
2.1.1 引子:多项式表示
线性结构:数据结构里最基础、最简单的一种数据结构类型
以一元多项式引入,一元多项式基本形式为:
主要运算有:多项式相加、相减、相乘等。
那么如果想在程序中进行多项式运算,该如何表示多项式呢?
首先注意多项式的重要数据:
- 多项式系数n
- 每项的系数ai
- 每项的指数i
表示方法1(最简单):顺序存储结构(数组)
用数组存储下标对应的多项式系数,a[i]->第i项系数ai
如f(x)=4x^5+3x^2+1,则数组为:
a[ ]={1,0,-3,0,0,4}
此时如果进行多项式运算就非常方便,如运算多项式相加就直接让数组对应分量相加
那么缺点是什么?有一个简单的问题:如何表示多项式X+3X^2000?如果按这种表示法,就需要创建一个长度为2001的数组来存储,而其中有效数据只有两个,非常浪费空间,做运算也需要让无用的0参加。
表示方法2:顺序存储结构,但表示非零项(结构体数组)
提取每个非零项信息:系数ai和指数i,此时可以将多项式看作(ai,i)的二元组集合,对于f(x)=4x^5+3x^2+1,就可以用结构体数组表示为:
struct list{
int ai;
int i;
}a[]
a[] = {
{4,5},
{3,2},
{1,0},
}
按照指数由大到小存储。此时运算相对第一种而言较为复杂,以相加为例,需要先比较两个多项式指数大小,当指数相等时候对系数相加。
表示方法3:链表结构,存储非零项(结构体指针)
链表中的每个节点存储一个非零项,内容包含系数ai、指数i、指针域
typedef struct PolyNode *p;
struct PolyNode{
int ai;
int i;
p link;
}
2.1.2 线性表及顺序存储
多项式问题带来的启示:
- 同一个问题可以有不同的表示(存储)方法
- 类似的,有序线性序列的组织和管理可以归结为线性表问题
线性表:由同类型数据元素构成有序序列的线性结构
表中元素的个数——线性表长度
表的起始位置——表头
表的结束位置——表尾
表中没有元素时——空表
线性表的抽象数据类型描述
类型名称:线性表
数据对象集:是0~N个元素构成的有序序列
操作集:初始化空表、输入表中位序返回对应元素、查找某元素第一次出现的位置、在某位序前插入一个新元素、删除指定位序的元素、返回线性表长度等。
说人话,如果用C++来描述,线性表可以建立一个类来表示,数据对象集就是成员变量,操作集对应成员函数
线性表的顺序存储实现
那么接下来就具体实现一下
<