数据结构——线性表增删改查实操练习

非科班出身学生学习计算机数据结构课程实操练习,用以巩固学习知识,项目函数有实操验证且结果符合预期。

代码取用自由,放出来也是自己方便复习。

如有算法上的漏洞或建议,可在评论区提出。

assert函数解释

assert 宏的原型定义在 assert.h 中,其作用是如果它的条件返回错误,则终止程序执行。

线性表定义(动态空间分配)
typedef struct SeqList
{
    int *data; /* data */
    int MaxSize, length;
} SeqList;
线性表初始化
void InitSeqList(SeqList *L)
{
    assert(L != NULL);
    L->data = NULL;
    L->length = 0;
    L->MaxSize = 0;
}
线性表尾插
void SeqListPushBack(SeqList *L, int x)
{
    assert(L != NULL);
    CheckCapacity(L);
    L->data[L->length] = x;
    L->length++;
}
线性表值打印
void SeqListPrint(const SeqList *L)
{
    assert(L != NULL);
    if (L->length == 0)
    {
        printf("there is nothing in SeqList!!!\n"); /* code */
    }
    for (int i = 0; i < L->length; i++)
    {
        printf("%d\n", L->data[i]); /* code */
    }
}
线性表按值查找,并返回该值在表中的位号
int SeqListFine(const SeqList *L, int x)
{
    assert(L != NULL);
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i] == x)
        {
            return i; /* code */
        }
    }
    return -1; /* code */
}
线性表按位插入
void SeqListInsert(SeqList *L, int pos, int x)
{
    assert(L != NULL);
    assert(pos >= 0 && pos <= L->length);
    CheckCapacity(L);
    for (int i = L->length; i > pos; i--)
    {
        L->data[i] = L->data[i - 1]; /* code */
    }
    L->data[pos] = x;
    L->length++;
}
类似,可修改方法作为表头元素插入
void SeqListPushFront(SeqList *L, int x)
{
    SeqListInsert(L, 0, x);
}
线性表按位删除
void SeqListErase(SeqList *L, int pos)
{
    assert(L != NULL);
    assert(L->length > 0);
    assert(pos >= 0 && pos <= L->length);

    for (int i = pos + 1; i < L->length; i++)
    {
        L->data[i - 1] = L->data[i]; /* code */
    }
    L->length--;
}
类似,可以修改方法作为表头元素删除
void SeqListEraseFront(SeqList *L)
{
    SeqListErase(L, 0);
}
线性表按位修改元素的值
void ChangeTheDataofCertainPos(SeqList *L, int pos, int x)
{
    assert(L != NULL);
    assert(L->length > 0);
    assert(pos >= 0 && pos <= L->length);
    L->data[pos] = x;
}

最后独自尝试写了王道结构书上的综合应用题第一题。

1.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出元素的位置由最后一个元素填补,若顺序表为空,则显示出错信息并推出运行。

int DeleteTheMiniumNumber(SeqList *L)
{
    assert(L != NULL);
    assert(L->length > 0);
    int a = 0;
    int c;
    for (int i = 0; i < L->length; i++)
    {
        a=L->data[0];
        if (a > L->data[i + 1])
        {
            a = L->data[i+1];/* code */
        }
         /* code */
       
    }
    c=L->data[a];
    L->data[a]=L->data[L->length-1];
    L->length--;
    return c;
}
附测试模块函数时的主函数
int main()
{
    SeqList L;
    InitSeqList(&L);
    SeqListPushBack(&L, 2);
    SeqListPushBack(&L, 3);
    SeqListPushBack(&L, 1);
    SeqListPushBack(&L, 4);
    SeqListPushBack(&L, 0);
    SeqListPushBack(&L, 5);
    
    SeqListPrint(&L);
    printf("\n\nafter inserting an element in a certain position\n");
    SeqListInsert(&L, 2, 10);
    SeqListPrint(&L);
    printf("\n\nafter inserting an element in the front of this sequence list\n");
    SeqListPushFront(&L, 9);
    SeqListPrint(&L);
    printf("\n\nafter erasing the third element of this sequence list\n");
    SeqListErase(&L, 3);
    SeqListPrint(&L);
    printf("\n\nafter erasing the first element of this sequence list\n");
    SeqListEraseFront(&L);
    SeqListPrint(&L);
    printf("\n\nthe length of this sequence list is %d\n", SeqListLength(&L));

    printf("\n\nafter change this data in certain position :\n");
    ChangeTheDataofCertainPos(&L, 4, 10);
    SeqListPrint(&L);
    printf("\n\nthe minimum element is %d\n",DeleteTheMiniumNumber(&L));
    SeqListPrint(&L);
    return 0;
}

参考文章:【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值