【数据结构】线性表的类型定义及顺序表的基本操作(C语言)

   笔者也开始学习数据结构啦,开始记录一些关于数据结构的笔记,本次记录一下线性表的类型定义以及用C语言实现一些顺序表基本操作的实现。

1.抽象数据类型

ADT List {
    数据对象:D = { ai | ai属于元素集,(i = 1,2,...,n,n>=0)}
    数据关系:R = { <ai-1,ai> | ai-1,ai属于D,(i = 2,3,...,n)}
    基本操作:
        InitList(&L);
        DestroyList(&L);
        ListInsert(&L,i,e);
        .....
    }ADT List

2.基本操作的定义与实现

1        InitList(Sqlist *L);

作用:构造一个空的线性表L

       InitList(*L)函数实现:

typedef int ElemType;
typedef struct{
    ElemType *elem;
    int len;
}Sqlist;

ElemType LnitList(Sqlist *L)            //构建一个空的顺序表L;
{
    L->elem = malloc(sizeof(Sqlist));   //为顺序表分配空间;
    if ( !L->elem ) 
        exit(0);                        //判断是否空间分配成功;
    L->len = 0;                         //初始空表长度为0;
    return 0;
}

2        DestroyList(Sqlist *L);

作用:销毁线性表L

       DestroyList(Sqlist *L)函数实现: 

void DestroyList(Sqlist *L)
{
    if ( L->elem )                            //释放存储空间
        free(L->elem);
}

3        ClearList(Sqlist *L);

作用:清空线性表L

       ClearList(Sqlist *L)函数实现: 

void ClearList(Sqlist *L)
{
    L->len = 0;                            //将线性表长度重置为0;
}

这里会有一点疑问,我将L.len 赋值为0之后线性表的数据不是还存在吗。

笔者的理解是,len被赋值为0,后面的遍历判定后不会进行输出,可视作线性表清空,而下一次用表时会再次赋值。

4       GetLength(Sqlist L);

作用:求得线性表的长度

        GetLength(Sqlist *L)函数实现:  

ElemType GerLength(Sqlist L)
{
    return L.len;                //返回长度;
}

5       IsEmpty(SqList L);

作用:判断线性表L是否为空

         IsEmpty (SqList L) 函数实现:

ElemType IsEmpty(Sqlist L)
{
    if ( L.len == 0)                //判断长度是否为0;
        return 1;
    else
        return 0;
}

6       GetElem(Sqlist L,ElemType i,ElemType *e);

作用:取出顺序表位于第i哥位置的值传给e

        GetElem (Sqlist L,ElemType i,ElemType *e) 函数实现:

ElemType GetElem(Sqlist L,ElemType i,ElemType *e)
{
    if ( i < 1 || i > L.len )
        return 0;                            //判断输入的i值是否合理;
    *e = L.elem[i-1];                         //将第i个数据赋值给e;
    return 1;
}

⭐7       LocateElem(SqList L, ElemType e);

作用:在线性表L中查找与指定值e相同的数据元素的位置,从表的一段开始,逐个进行记录的关键字和给定值的比较。找到,返回该元素的位置序号,未找到,返回0

        LocateElem (SqList L, ElemType e) 函数实现:

ElemType LocateElem(Sqlist L,char e)
{
    //在线性表L中查找值为e数据元素,返回其序号(即第几个元素)
    for (int i = 0; i < L.len; i++ )
    {
        if ( L.elem[i] == e )
            return i+1;                //查找成功,返回其序号(i+1就不用解释了叭!);
    }
    return 0;                          //查找失败,返回0;
}

8       ListInsert_Sq(SqList *L,ElemTypei,char e);

作用:向顺序表位置为i的地方插入数据e

         ListInsert_Sq (SqList *L,ElemTypei,char e) 函数实现:

ElemType ListInsert_Sq(Sqlist *L,ElemType i,char e)
{
    if ( i < 1 || i > L->len+1 )        //判断输入的i值是否合法;
        return 0;
    if ( L->len == MAX )                //MAX为define的函数,即初始上限表长;
        return 0;                       //判断存储空间是否已满;
    for ( int j = L->len-1; j >= i-1; j-- )
    {
        L->elem[j+1] = L->elem[j];      //从位置i开始腾出空间,依次向后移动;
    }
    L->elem[i-1] = e;                   //将插入数据放入;
    L->len++;                           //表长增加一;
    return 1;
}

 ⭐9       ElemType ListDelete_Sq(Sqlist *L,ElemType i);

作用:将顺序表中位置i的元素删除

         ElemType ListDelete_Sq (Sqlist *L,ElemType i) 函数实现:

ElemType ListDelete_Sq(Sqlist *L,ElemType i)
{
    if ( i < 1 || i > L->len )                  //判断输入i是否合法;
        return 0;
    for ( int j = i; j <= L->len-1; j++ )
    {
        L->elem[j-1] = L->elem[j];              //从i+1位置开始,整体往前移动一格,此时会覆盖i位置的值,相当于删除
    }
    L->len--;                                   //表长减一;
    return 1;
}

这里暂时就是常用的一些基本操作啦,如果有什么错误请各位指出来,笔者会及时修改~~

请多多担待~

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值