数组和广义表

【数组】

顺序存储:

n维的数组结构存储方式还是按照一维的顺序存储,只是在维度上和纬度的附加单位上设置含与维度值相等的变量(放进一个数组中),通过变量之间的协同操作实现n维数组的表现结构

【矩阵】

1、特殊矩阵

对称矩阵

存储方式:只存储下(或者是上)三角矩阵的值,并将值按照行(或者列)顺序的排序方式存储进一维数组中

2、稀疏矩阵

存储方式:

(1)三元组

typedef struct{
    int i,j;       //i对应行,j对应列
    ElemType e;    //e为元素值
}Triple;

其中i对应行,j对应列,元素值为e。

    普通转置:o(mu*tu)

    快速转置:引入了2个辅助向量:o(mu+nu)

(2)行逻辑链接的顺序表

将三元组结构中增加的2个辅助向量中的一个(各行计量第一个非零元素的位置的变量向量)

typedef struct{
    Triple data[MAXSIZE+1];
    int rpos[MAXRC+1];
    int mu,nu,tu;    //矩阵的行数,列数和非零元素
}RLSMatrix;

(3)十字链表存储

    //-----稀疏矩阵的十字链表存储表示-----
typedef struct OLNode{
    int i,j;    //该非零元的行和列下标
    ElemType e;
    struct OLNode *right,*down;    //行列表的分别后继链域
}OLNode;*OLink;

typedef struct{
    OLink *rhead,*chead;    //行和列链表头指针向量基址由CreateSMatrix分配
    int mu,nu,tu;           //行数、列数和非零元个数    
}CrossList;

操作类似于链表

创建过程:用动态生成结点的方式生成结点,并将结点插入链表中,注意要处理好总共4个指针

A、矩阵相乘

B、矩阵相加(注意可能出现的对应结点相加为零消除的情况)

【广义表】

(1)简单存储结构

(2)扩展存储结构

【m元多项式】

比广义表多了一个数据项,因为要存储系数和指数这2个参数

【广义表的递归算法】

广义表有两种分析方法,一种是将广义表分成n个字表逐一分析

eg:S=((),(a,b),((c),d))


其中A = (),B = (a,b),C = ((c),d),再进行递归分解

还有一种是将广义表内部分为2个部分,表头和表尾:

Head = (),Tail = (a,b),((c),d)。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值