线性表的增加和删除

#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINSERT 10

typedef struct{
    int *elem;
    int length;//记录链表当前长度
    int list_size;//记录链表的总容量
}SqList;

SqList init_list(SqList L){
    L.elem=(int)malloc(LIST_INIT_SIZE*sizeof(int));
    if(!L.elem){
        exit(0);
    }
    L.length=0;
    L.list_size=LIST_INIT_SIZE;
    return L;
}

SqList input_list(SqList L,int n){
    if(n>L.list_size){
        exit(0);
    }
    int i;
    for( i = 0 ; i < n ; i++){
        scanf("%d",&L.elem[i]);
    }
    L.length=n;
    return L;
}

void output_list(SqList L){
    int i;
    for( i = 0 ; i < L.length ; i++ ){
        printf("%d ",L.elem[i]);
    }
    printf("\n");
}

SqList Insert_List(int index,int num,SqList L){
    int *newbase;
    int init_size = L.list_size;
    if(index < 0 || index > L.length+1) {
        exit(0);
    }
    if(L.length+1>L.list_size){
        newbase = (int *) realloc(L.elem,(L.list_size+LISTINSERT)*sizeof(int));
        L.elem=newbase;
        L.list_size=init_size + LISTINSERT;
    }
    if(!newbase){
        exit(0);
    }
    int i;
    for(i = L.length-1;i >= index - 1 ; i-- ){
        L.elem[i+1]=L.elem[i];
    }
    L.elem[index - 1]=num;
    L.length++;
    return L;
}

SqList Delete_List(int index,SqList L){
    if(index < 0 || index > L.length){
        exit(0);
    }
    int i;
    for(i = index ; i < L.length ; i++) {
        L.elem[i-1]=L.elem[i];
    }
    L.length--;
    return L;
}

int main(){
    SqList list;
    list=init_list(list);
    int n,i;
    scanf("%d",&n);
    list=input_list(list,n);
    output_list(list);
    printf("请输入需要插入的位置index和数值num\n");
    int index,num;
    scanf("%d %d",&index,&num);
    list=Insert_List(index,num,list);
    output_list(list);
    printf("请输入要删除的元素的位置index\n");
    scanf("%d",&index);
    output_list(Delete_List(index,list));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值