数据结构——表

数据结构——表

1、定义:
线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。
2、特征/性质
1)集合中必存在唯一的一个第一个元素
2)集合中必存在唯一的一个最后元素
3)除最后一个元素之外,均有唯一的后继
4)除第一个元素之外,均有唯一的前驱
3、线性表的基本操作
1)初始化线性表InitList(L)
2)销毁线性表DestoryList(L)
3)清空线性表ClearList(L)
4)求线性表的长度ListLength(L)
5)判断线性表是否为空IsEmpty(L)
6)获取线性表L中的某个数据元素内容GetElem(L,i,e)
7)检索值为e的数据元素LocateElem(L,e)
8)返回线性表L中e的直接前驱元素PriorElem(L,e)
9)返回线性表L中e的直接后继元素NextElem(L,e)
10)在线性表L中插入一个数据元素ListInsert(L,i,e)
11)删除线性表L中第i个数据元素ListDelete(L,i,e)
4、线性表的顺序表示:ArrayList
一般使用数组来描述 注意:数组中第i-1的单元存储着线性表中第i个数据元素的内容,换句话说,C语言中数组的下标从“0”开始,如果L是顺序表,则表中第i个数据元素是L.elem[i-1].
优点:在于随机访问元素 缺点:插入和删除的时候,需要移动大量的元素
补充:线性表复杂操作
1、求线性表的并集

思路:扩大线性表LA,将存在于线性表LB中不存在线性表LA中的数据元素插入到线性表LA中去,只需要从线性表LB中依次去取的每个数据元素,并依值在线性表LA中进行查访,如果不存在,则插入之

void union(List &La, List Lb)
{
    La_len = ListLength(La);
    Lb_len = ListLength(Lb);
    for(i = 1;i <= Lb_len; i++)
    {
        GetElem(Lb, i, e);//取Lb中第i个数据元素赋给e
        if(!LocateElem(La,e,equal))//La中不存在和e相同的数据元素,则插之
            ListInsert(La, ++La_len, e);
    }
}

算法复杂度:O(LALB)
2、线性表合并且按值非递减有序排列

void MergeList(List La, List Lb, List &Lc)
{
    //已知线性表La和Lb的数据元素按值非递减排序
    InitList(LC);
    i = j = 1;k = 0;
    La_len = ListLength(La);
    Lb_len = ListLength(Lb);
    while((i <= La_len) && (j <= Lb_len))
    {
        GetElem(La, i, ai);
        GetElem(Lb, j, bj);
        if(ai <= bj)
        {
            ListInsert(Lc, ++k, ai);
            ++i;
        }
        else
        {
            ListInsert(Lc,++k, bj);
            ++j;
        }
    }
    while(i <= La_len)
    {
        GetElem(La,i++,ai);
        List
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值