1 //线性表的插入与删除 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define LIST_INIT_SIZE 100 //线性表存储空间的初试分配量 5 #define LISTINCREMENT 10 //线性表存储空间的分配增量 6 #define ERROR 0 7 #define OK 1 8 typedef struct{ 9 int *elem; //存储空间的基址 10 int length;//当前长度 11 int listsize;//当前分配的存储容量 12 }Sqlist; 13 //函数声明 14 int Initlist(Sqlist *L);//线性表的初始化 15 int ListInsert(Sqlist *L,int i,int e);//在顺序表第I个位置之前插入新元素e 16 int ListDelete(Sqlist *L,int i);//删除第i个元素 17 int main(void){ 18 Sqlist L; 19 int i,len,e; 20 if(Initlist(&L)){ 21 printf("请输入线性表的长度"); 22 scanf("%d",&len); 23 L.length=len; 24 printf("请输入线性表的元素"); 25 for(i=0;i<len;i++){ 26 scanf("%d",L.elem+i); 27 L.listsize--; 28 } 29 printf("请输入要插入的元素"); 30 scanf("%d",&e); 31 printf("请输入要插入的位置"); 32 scanf("%d",&i); 33 } 34 if(ListInsert(&L,i,e)){ 35 for(i=0;i<L.length;i++) 36 printf("%d ",L.elem[i]); 37 } 38 39 printf("请输入要删除的位置"); 40 scanf("%d",&i); 41 if(ListDelete(&L,i)){ 42 for(i=0;i<L.length;i++) 43 printf("%d ",L.elem[i]); 44 } 45 return 0; 46 } 47 48 int Initlist(Sqlist *L){ 49 L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); 50 if(!L->elem) exit(ERROR); 51 L->length=0; 52 L->listsize=LIST_INIT_SIZE; 53 return OK; 54 } 55 int ListInsert(Sqlist *L,int i,int e){ 56 int *newbase,*q,*p,a; 57 if(i<1||i>L->length+1) return ERROR; //I值不合法 58 if(L->length>=L->listsize){ //当前存储空间已满 59 newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int)); 60 if(!newbase) exit(ERROR); //存储分配失败 61 L->elem=newbase;//新基址 62 L->listsize+=LISTINCREMENT;//增加存储容量 63 } 64 q=&(L->elem[i-1]); 65 a=L->length; 66 for(p=&(L->elem[a-1]);p>=q;--p) *(p+1)=*p; 67 *q=e; 68 ++L->length; 69 return OK; 70 } 71 int ListDelete(Sqlist *L,int i){ 72 int *p,*q; 73 if(i<1||i>L->length) return ERROR;//i值不合法 74 p=&(L->elem[i-1]);//被删除元素的位置 75 q=L->elem+L->length-1;//表尾元素的位置 76 for(++p;p<=q;++p) *(p-1)=*p;//被删元素之后的元素向左移动 77 --L->length;//表长减1 78 return OK; 79 }
原文地址:https://www.cnblogs.com/suqf/p/9734279.html
时间: 2024-10-12 14:00:29