数据结构之线性表(1)

线性表:零个或多个数据元素的有限序列。

在较复杂的线性表中,一个数据元素可以由若干个数据项组成。

线性表抽象类型定义:

ADT         线性表(List)

Data:

 

Operation:

           InitList(*L)   //初始化线性表

           ListEmpty(L)   //线性表为空返回true,否则返回false

           ClearList(*L)  //清空线性表

           GetElem(L,i,*e)//获得线性表L在i中的位置元素,并通过e返回。

           LocateElem(L,e)//查找表中与e相等的,存在返回true,否则返回false

           ListInsert(*L,i,e)//线性表L在i处插入e

           ListDelete(*L,i,*e)//删除表L在i中的位置,并返回*e的值

           ListLength(L)//返回线性表L的个数。

endADT

实现A与B的并集,就是把B中不在A中的部分插入A中。

//将线性表Lb中不在La中的数据全部插入到La中

void  union(List *La,List Lb)

{
    int La_len,Lb_len,i;
    ElemType e;            //声明La和Lb中相同的元素e
    La_len = ListLength(La);//求线性表的长度
    Lb_len = ListLength(Lb);

    for(i = 1; i < Lb_len; i++)
    {
        GetElem(Lb,e);    //获取Lb中e的元素
        if(!LocateElem(La,e))    //如果La中的数和e不相等
            ListInsert(La,++La_len,e)    //把e插入La的i中
    }

}

           线性表的顺序存储结构:是指用一段地址连续的存储单元依次存储线性表的数据元素。

#define MAXSIZE 20      //存储空间初始化分配量

typedef int ElemType;   //ElemType类型根据情况而定,
typedef struct 
{
    ElemType data[MAXSIZE];     //数组存储数据元素
    int length;                 //线性表当前长度
}SqList;

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
//Status是函数的类型,其值是函数结构状态代码,顺序线性表L已存在,用e返回L中第i个数据元素的值
Status GetElem(SqList L,int i,ElemType *e)
{
    if(L.length == 0 || i < 1 || i > L.length)
    {
        return ERROR;
    }
    *e = L.data[i - 1];
    return OK;
}

//线性表已经存在,进行插入操作
Status ListInsert(SqList *L, int i,ElemType e)
{
    int k;
    if(L->length == MAXSIZE)
        return ERROR;
    if(i < 1 || i > L->length + 1)
        return ERROR;
    if(i <= L->length)
    {
        for(k = L->length - 1;k >= i - 1;k--)
            L->data[k+1] = L->data[k];
    }
    L->data[i - 1] = e;
    L->length++;
    return OK;
}

//删除节点
Status ListDelete(SqList *L,int i,ElemType *e)
{
    int k;
    if(L->length == 0)
        return ERROR;
    if(i < 1 || i > L->length)
        return ERROR;
    *e = L->data[i-1];
    if(i < L->length)
    {
        for(k = i;i < L->length;k++)
        {
            L->data[k - 1] = L->data[k];
        }
    }
    L->length--;
    return OK;
}
//平均时间复杂度为O(n),最好时间复杂度为O(n),最坏时间复杂度为O(1)

平均时间复杂度为O(n),最好时间复杂度为O(n),最坏时间复杂度为O(1)。

线性表的顺序存储结构优点:

  1. 无需为表中的元素之间的逻辑关系增加额外的存储空间
  2. 可以快速的存取表中的任一位置元素

线性表的顺序存储结构缺点:

  1. 插入和删除需要移动大量的元素
  2. 当线性表的长度变化较大时难以确定存储空间的容量。
  3. 造成存储空间的“碎片”

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值