C语言实现顺序表:插入和删除

保存一下学习阶段的代码方便复习,大佬可绕路

#include <stdio.h>
#include <stdlib.h>
#define  SIZE 100

typedef struct
{
    int *elem;
    int size;// 分配的顺序表存储空间
    int length;//顺序表当前长度
}SqList;

//初始化顺序表
SqList InitList(SqList L)
{
    L.elem = (int*)malloc(SIZE * sizeof(int));//动态分配空间
    if(!L.elem)
        exit(0);
    L.size = SIZE;
    L.length = 0;
    
    return L;
}

SqList DisplaySqList(SqList L, int len)
{
    for(int i = 0; i < len; i++)
    {
        printf("%d ", L.elem[i]);
    }
    printf("\n");
}
//插入新元素到第i个位置
SqList SqListInsert(SqList L, int i, int e)
{
    //L.elem = (int*)malloc((SIZE+1) * sizeof(int)); ->为什么写了这一行,插入值之后,除了插入的元素其他值都变随机值了???
    //懂了!!在这个函数里又给L新开辟了空间,所以之前的值都没了!!!
    if(i < 1 || i > L.length + 1) {
        printf("插入位置不正确");
        exit(0);
    }
    if(L.length == SIZE) {
        printf("存储空间已满");
        exit(0);
    }
    for(int j = L.length - 1; j >= i - 1; j--)//从最后一个元素,依次往后移动,
    {
        L.elem[j+1] = L.elem[j];//元素后移
    }
    L.elem[i-1] = e;
    L.length++;
    return L;
}

SqList SqListDel(SqList L, int i)
{
    if(i < 1 || i > L.length) {
        printf("删除位置不正确");
        exit(0);
    }
    for(int j = i - 1; j <= L.length - i; j++) {
        L.elem[j] = L.elem[j+1];//删除的第i个位置后面的元素依次向前移动
    }
    L.length--;
    return L;
}

int main() 
{
    SqList L;
    L = InitList(L);
    int len;
    printf("输入顺序表的长度:");
    scanf("%d", &len);
    for(int i = 1; i <= len; i++)//给顺序表赋值
    {
        L.elem[i-1] = i;
        L.length++;
    }
    DisplaySqList(L, len);
    int i, e;
    printf("请输入要插入的位置和值:");
    scanf("%d %d", &i, &e);
    L = SqListInsert(L, i, e);
    DisplaySqList(L, L.length);
    printf("请输入要删除的位置:");
    scanf("%d", &i);
    L = SqListDel(L, i);
    DisplaySqList(L, L.length);
    return 0;
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值