线性表基础&线性表应用:多项式

概念线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。实际应用中,线性表都是以栈、对列、字符串等特殊线性表的形式中来使用的结构特点有序性:集合中必存在唯一的一个“第一元素”;集合中必存在唯一的一个 “最后元素”;除最后一个元素之外,均有唯一的后继;除第一个元素之外,均有唯一
摘要由CSDN通过智能技术生成

概念

  • 线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
  • 实际应用中,线性表都是以栈、对列、字符串等特殊线性表的形式中来使用的

结构特点

  • 有序性:集合中必存在唯一的一个“第一元素”;集合中必存在唯一的一个 “最后元素”;除最后一个元素之外,均有唯一的后继;除第一个元素之外,均有唯一的前驱
  • 均匀性:同一线性表中各数据元素必定具有相同的数据类型和长度
  • 数据元素的个数n定义为表的长度,n=0时成为空表。
  • 顺序存储结构和链式存储结构两种方法

基本操作

  • isEmpty(L),空表返回true,否则返回false
  • ClearList(L),将L置为空表
  • ListLength(L),返回L中元素个数
  • Get(L, i),返回L中第i个位置的元素
  • Prior(L, i),返回L中第i个位置的前驱元素
  • Next(L, i),返回L中第i个位置的后继元素
  • ListInsert(L, i, e),在L中第i个位置插入元素e
  • Delete(L, p),在L中删除位置p处的元素
  • Init(L),构造一个空的线性表
  • ListTraverse(L),遍历输出所有元素
  • ListLocate(L, x),值为x的元素在L中位置

实现方式

  • 连续存储空间,如数组,new ElemType[Len]等,可以随机读取下标位置的元素。但是删除和添加的时候复杂度是O(N)
  • 线性链表,也叫LinkList,每个元素的存储位置都要从头指针开始算起,用下标读取操作是O(N),删除和添加复杂度也是O(N)(因为需要从头指针开始找),合并两个有序链表的时候可以不开辟新的存储空间,直接修改各个元素的next指针即可
  • 静态链表,用数组描述的链表,需要预先分配一个较大的空间,但是在插入和删除操作的时候不需要移动元素。假设S为SLinkList变量,S[0].cur指示第一个节点在数组中的位置。有所不同的是需要自己实现分配(malloc或new)和回收(free或delete),插入的时候需要从备用链表上取得第一个节点作为待插入的新结点,反之,在删除时将从链表中删除下来的结点链接到备用链表上。
  • 循环链表,从表中任一结点出发均可找到表中其他结点。循环链表的操作和线性链表一致,不同在于遍历结束条件不是p->next为空,而是p->next等于头指针。
  • 双向链表,比单链表多了指向前一个元素的指针,使得PriorElem的执行时间也是O(1),单链表则是O(N)。

线性表应用:多项式

  • 用链表完成的存储多项式的一个应用,下面给出实现代码和测试结果
  • 头文件
#include <iostream>
using namespace std;

struct Node
{
    float coef;
    int expn;
    Node* next;
    Node()
    {
        coef = 0;
        expn = 0;
        next = NULL;
    }
};

class polynomial
{
public:
    polynomial();
    polynomial(polynomial &p);
    ~polynomial();
    void CreatePoly(int m);
    void ClearPoly();
    void PrintPoly();
    void AddPoly(polynomial &p);
    void SubtractPoly(polynomial &p);
    void MultiplyPoly(polynomial &p);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值