数组和广义表

数组和广义表

数组的抽象数据类型定义

ADT Array{
数据对象:ji=0,1,..,bi-1,1,2,…,n;D={aj1j2…jn|n>0称为数组的维数,bi是数据第i维的长度,ji是数组元素第i维的下标,aj1j2…jn∈ElemSet}
数据关系:R={R1,R2,…,Rn}Ri={<\aj1j2..ji…jn,aj1j2..ji+1…jn>|0 ≦j k ≦b k -1 ,1≦ k≦ n 且k≠i ,0≦ j i ≦ b i -2 , a j 1 j 2 … j i+1 … j n ∈D}
基本操作:
InitArray(&A,n,bound1,…,boundn)
操作结果:若维数n和各维长度合法,则构造相应的数据A,并返回OK.
DestroyArray(&A)
操作结果:销毁数组A.
Value(A,&e,index1,…,indexn)
初始条件:A是n维数组,e为元素变量,随后是n个下标值。
操作结果:若各下标不超界,则将e的值赋给所指定的A的元素,并返回ok.
}ADT Array

数组的物理存储

  • 顺序存储方式
    • 行优先顺序
    • 列优先顺序

广义表的抽象数据类型定义

ADT Glist{
数据对象:D={ei|1,2,…,n;n>=0;ei∈AtomSet,AtomSet为某个数据对象}
数据关系:R1={<\ei-1,ei>|ei-1,ei∈D,2<=i<=n}
基本操作:
InitGList(&L);
操作结果:创建空的广义表L.
CreateGList(&L,S);
初始条件:S是广义表的书写形式串;
操作结果:由S创建广义表L.
DestroyGList(&L)
初始条件:广义表L存在。
操作结果:销毁广义表L.
CopyGList(&T,L)
初始条件:广义表L存在。
操作结果:由广义表L复制得到广义表T.
GListLength(L)
初始条件:广义表L存在。
操作结果:求广义表L的长度,即元素个数。
GListDepth(L)
初始条件:广义表L存在。
操作结果:求广义表L的深度。
GListEmpty(L)
初始条件:广义表L存在。
操作结果:判定广义表L是否为空。
GetHead(L)
初始条件:广义表L存在。
操作结果:取广义表L的头。
GetTail(&T,L)
初始条件:广义表L存在。
操作结果:取广义表L的尾。
InsertFirst_GL(&L,e);
初始条件:广义表L存在。
操作结果:插入元素e作为广义表L的第一元素。
DeleteFirst_GL(&L,&e)
初始条件:广义表L存在。
操作结果:删除广义表L的第一元素,并用e返回。
Traverse_GL(L,visit());
初始条件:广义表L存在。
操作结果:遍历广义表L,用函数visit处理每个元素。

}

广义表的物理存储

  • 用链式存储结构(由表节点和原子节点构成)
typedef struct GLNode
{
    int tag;
    union
    {
        elemtype value;
        struct 
        {
            struct GLNode *hp,*tp;
        }ptr;
    }Gdata;
} GLNode
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值