线性表的增加和删除

来源:互联网 发布:edius软件在那里下载 编辑:程序博客网 时间:2024/06/06 10:49
#include <stdio.h>#include <stdlib.h>#define LIST_INIT_SIZE 100#define LISTINSERT 10typedef 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;}
原创粉丝点击