数据结构-数组和广义表

一、数组的顺序表现和实现

主要有两种存储方式:

  • 以行序为主
  • 以列序为主

 二、矩阵的压缩存储

1.特殊矩阵--下(上)三角矩阵

可以定义一个长度为n*(n+1)/2的一维数组来存储

如:下三角i>=j:a[i][j]对应存储在sa[i*(i-1)/2+j-1]

2.稀疏矩阵

用三元顺序表存储,三元组分别记录非零元素的行、列位置和元素值

(1)三元组顺序表的实现

#define MAXSIZE 100
typedef struct {
    int i,j;//行下标和列下标
    ElemType e;
}Triple;
typedef struct{
    Triple data[MAXSIZE+1];//data[0]空出来
    int mu,nu,tu;//矩阵的行数、列数、非零元素的个数
}TSMatrix;

(2)三元顺序表的转置实现

  • 原三元表的col相当于转置后的行,将col作为最外面的循环计数条件,是依次把转置后的每一行(也就是原三元表中列数为现在的行数的)非零元素都遍历找到;
  • q为转置后data数组的下标,每添加一个就自增1;
  • 第二层循环是在原三元组中找到列数即j和此次col匹配的非零元素。
Status TransposeSMatrix(TSMatrix M,TSMatrix &T){
    int col,p,q;
    T.mu=M.nu;
    T.nu=M.mu;
    T.tu=M.tu;
    if(T.tu){//T不全为0即非零元素个数不等于0
    q=1;
    for(col=1;col<=T.mu;col++){
        for(p=1;p<=M.tu;p++){
            if(M.data[p].j==col){
                T.data[q].i=M.data[p].j;
                T.data[q].j=M.data[p].i;
                T.data[q].e=M.data[p].e;
                q++;
            }
        }
    }
    }
    return OK;
}
                

*时间复杂度为:O(M.nu*M.tu)

三、广义表的类型定义

1.广义表的术语:

表头(Head)非空广义表的第一个元素

表尾(Tail)除了表头的其余元素组成的

深度广义表中括号嵌套的最大层数

原子如果ai是单个元素则称为元素,一般用小写字母表示

子表如果ai是广义表则称为子表,一般用大写字母表示

:直观上有几个元素,嵌套之类的也只看做一个元素

 

 2.广义表的存储结构

typedef enum(ATOM,LIST}ElemTag;
typedef struct GLNode{
    ElemTage tag;
    union{
    AtomType atom;
    struct {struct *hp,*tp;}ptr;
    }
}*Glist;

 

 


1.

2.注意入队时队列为空的情况;出队时仅有一个元素的情况 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值