面经(基础) - 线性表

一、线性表

1. 定义

是一个有限序列,表中各个元素是相继排列的,且每两个相邻元素之间都有直接前驱和直接后继的逻辑关系,是一种逻辑结构

一个线性表是 N 个具有相同特性的数据元素的有限序列

元素之间的关系是一对一的关系,除了第一个元素和最后一个元素之外,其他的元素都是首尾相连(适用于大部分的线性表)

  • a( i-1 ) 是 a( i ) 的直前驱元素

  • a( i+1 ) 是 a( i ) 的直后继元素


2. 特点

  • 存在唯一的第一个元素和最后一个元素

  • 除第一个元素外,其他元素有且仅有一个直接前驱(第一个元素没有直接前驱)

  • 除最后一个元素外,其他元素有且仅有一个直接后继(最后一个元素没有直接后继)

  • 线性表中的每一个元素都具有相同的数据类型,且不能按子表那样再分割

    color = {'red','orange','yellow','green','blue','black'}
    score = {'667','664','659','662','610','632','651'}

3. 基本操作

  • InitList (&L)

    操作结果:构造一个空的线性表L

    'SqList:是结构体'
    int initList(SqList *L){
        L->length = 0;
        return 1;
    }
  • printList (L)

    操作结果:打印一个顺序表,方便测试操作是够正确

    'SqList:是结构体'
    int printList(SqList L){
        if(L.length == 0){
            print("链表为空\n");
            return 0;
        }
        int i;
        for(i = 0 ; i < L.length ; i++){
            print("data[%d] = %d\n" , i , L,data[i]);
        }
        print("\n");
        return 1;
    }
  • gerlength (L)

    操作结果:获取顺序表的长度

    'SqList:是结构体'
    int getlength(SqList L){
        return L.length;
    }
  • createList (&L,int length)

    操作结果:创建一个顺序表,每个元素的值随机赋值

    'SqList:是结构体'
    int createList(SqList *L,int length){
        srand(time(0)); '随机赋值'
        int i;
        for(i = 0 ; i < length ; i++){
            L -> length++;
        }
        return 1;
    }
  • inserList (&L,int pos,ElemType elem)

    操作结果:在指定位置处插入一个新的元素

    int insertList(SqList *L,int pos,ElemType elem){
        int i;
        if(pos < 1 || pos > L -> length){
            print("插入的位置有误,无法插入数据\n");
            retuen 0;
        }
        for(i = L -> length-1 ; i >= pos-1 ; i--){
            L -> data[i+1] = L -> data[i];
        }
        L -> data[pos-1] = elem;
        L -> lengrh++;
        return 1;
    }
  • locateElem (L,ElemType e)

    操作结果:查找在线性表中时候含有指定元素

    int locateElem(SqList L,ElemType e){
        int i;
        for(i = 0 ; i < L.length ; i++){
            if(L.data[i] == e){
                pring("在pos[%d]位置处,查找到了元素elem:%d\n",i + 1,e);
                    return 1;
            }
        }
        return 0;
    }

4. 练习

1.线性表是具有n个( C )的有限序列
    A. 
    B.
    C.数据元素
    D.
    
2.以下( B )是一个线性表
    A.由n个实数组成的集合 --> 指的是集合,集合中各元素没有前后驱关系
    B.由100个字符组成的序列
    C.所有整数组成的序列 --> 有限序列
    D.邻接表 --> 邻接表属于存储结构
    
3.在线性表中,除开始元素外,每个元素( A )
    A.只有唯一的前驱元素
    B.只有唯一的后继元素
    C.有多个前驱元素
    D.有多个后继元素
    
4.假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A = A ∪ B。这就要求对线性表作如下操作:扩大线性表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);
        if(!LocateElem(LA,e,equal)ListInsert(LA,++LA_len,e));
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值