线性表再谈之稀疏矩阵+

稀疏多项式

本来不打算对线性表进行多次阐述了。但是在这两天的做题过程中发现了好多有关顺序表的有趣的事儿。感觉突然还是很有必要再对其进行赘述一下的啦。以后的记录都是自己的思考,而不是简单的实现步骤的搬运工。

首先,对顺序表相关的知识,做以总结,再对其谈谈有意思的事情。最后聊聊有关题目,我做了些思考,有一些新的看法。

线性表

有关算法的事情在此简述。

经过多次的练习发现,顺序表在以后的数据结构中占有着举足轻重的作用。什么叫线性表,简单点就是一个数据集合,然后我们的问题聚集焦点不是数据质量,而是如何很好的存储,组织数据结构,才是我们这里需要注意的。

线性表中,有三大数据结构,其一就是顺序表,接着就是单链表,最后是循环链表。

更详细点来说,顺序表可以扩展,加点限制就是栈和队列,对吧,就是把顺序表的一边堵住,只能从一边来对其进行进出的就是栈了,如果是存储和取出都是沿着某个轴线进行的,就是队列。你们讲,是不是这个道理。

我们接着唠嗑,对于单链表,人家也是存在可扩展空间的,就是没有顺序表那么骚气。单链表是可以有表头结点,这样的话,人家随时就可以找到自己的flag来对自己的相对位置进行确定了,心里当然就会有点B数了。然而,单链表还不服,觉得自己还能再牛B点,就…..首尾相连了,向贪吃蛇,自己把自己给game over的那种,但是,循环链表的优点不是自杀,可是通过首尾相连的优点找到自己的前驱。

最后呢,双向链表、双向循环链表呢,说到底,其本质还是单链表,对吧,前者是在单链表的基础上,多了一个自己的大兄弟。这样的话,访问数据更加随意,来回自如,出神入化。后者呢,在此基础上加持,首尾相连,表中不存在NULL,反向遍历查找数据结构,emmm,当然,它太这样搞,把自己也搞的太肥,多占用了几乎一半的指针存储空间。

平时,实际应用哪个,我们自己心里有点B数,扬长避短就好。

稀疏多项式的实现

说说理论吧,第一点就是我们即将要做什么。

求取,求取稀疏多项式Pn(x)=c1x^e1+c2x^e2+…+cmx^em,其中em呈递增状态。

  • 头文件定义
#define Status int //返回状态限制
#define OK 1 //成功返回项目
#define Error 0 // 错误返回项目

/*定义多项式的匿名结构体*/
typedef struct{
    int coef;//系数
    int exp;//指数
}PolyTerm;

typedef struct{
    PolyTerm *data;
    int last;
}SqPoly;



Status PolyInit(SqPoly *);//初始化多项式

double PolySum(SqPoly *,double);//求多项式的值
  • .c文件对其实现
#include <stdio.h>
#include <stdlib.h>
#include "PolyTerm.h"

//函数实现

Status PolyInit(SqPoly *l)
{
    int count;
    PolyTerm *p;
    printf("输入多项式的项数:\n");
    scanf("%d",&(l->last));
    l->data=(PolyTerm *)malloc((l->last)*sizeof(PolyTerm));
    if(!l->data)return Error;
    p=l->data;
    for(count=0;count<l->last;count++)
    {
        printf("请输入系数:\n");
        scanf("%d",&(p->coef));
        printf("请输入指数:\n");
        scanf("%d",&(p->exp));
        p++;
    }
    return OK;
}

double PolySum(SqPoly *l,double x0)
{
    double Pn,x;
    int i,j;//创建双层循环,外层控制n个项数,内层控制每一项的系数和未知数x指数的乘积。
    PolyTerm *p;
    p=l->data;
    for(i=0,Pn=0;i<l->last;i++,p++)
    {
        for(j=0,x=1;j<p->exp;j++)
        {
            Pn=Pn+p->coef*x;
            printf("当前值为%f.\n",Pn);
        }
        putchar('\n');
    }
    return Pn;
}

扩展的话,肯定可以对其进行扩展,怎么扩展呢。你将会发现新的大陆。当然实现方法也是不难的,给粗一些思路,怎么做,小小思考一波就好。

一、多项式可以合并吧?

二、多项式可以求导吧?

三、多项式可以相乘吧?

好啦,剩下的我不多说,继续get吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值