(浙大陈越版)数据结构 第二章 线性结构 2.1 线性表及其实现

线性表代码实战:

线性表的顺序存储结构具体实现 代码实战 赛博图书馆搭建指南(使用C\C++语言)_Shawn·Bing的博客-CSDN博客

目录

2.1 线性表及其实现

2.1.1 引子:多项式表示

表示方法1(最简单):顺序存储结构(数组)

表示方法2:顺序存储结构,但表示非零项(结构体数组)

表示方法3:链表结构,存储非零项(结构体指针)

2.1.2 线性表及顺序存储

多项式问题带来的启示:

线性表的抽象数据类型描述

线性表的顺序存储实现

线性表的主要操作的实现

2.1.3顺序存储的插入和删除

2.1.4 线性表的链式存储实现

2.1.5链式存储的插入和删除 

2.1.6 广义表和多重链表

广义表

多重链表

2.1 线性表及其实现

2.1.1 引子:多项式表示

线性结构:数据结构里最基础、最简单的一种数据结构类型

以一元多项式引入,一元多项式基本形式为:

主要运算有:多项式相加、相减、相乘等。

那么如果想在程序中进行多项式运算,该如何表示多项式呢?

首先注意多项式的重要数据:

  1. 多项式系数n
  2. 每项的系数ai
  3. 每项的指数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 线性表及顺序存储

多项式问题带来的启示:

  1.  同一个问题可以有不同的表示(存储)方法
  2. 类似的,有序线性序列的组织和管理可以归结为线性表问题

线性表:由同类型数据元素构成有序序列的线性结构

表中元素的个数——线性表长度

表的起始位置——表头

表的结束位置——表尾

表中没有元素时——空表

线性表的抽象数据类型描述

类型名称:线性表

数据对象集:是0~N个元素构成的有序序列

操作集:初始化空表、输入表中位序返回对应元素、查找某元素第一次出现的位置、在某位序前插入一个新元素、删除指定位序的元素、返回线性表长度等。

说人话,如果用C++来描述,线性表可以建立一个类来表示,数据对象集就是成员变量,操作集对应成员函数

线性表的顺序存储实现

那么接下来就具体实现一下

<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值