顺序表插入操作的实现
1 #include<stdio.h> 2 #include <stdlib.h> 3 4 void InitList(int *&l, int n) 5 { 6 l = (int*)malloc(n*sizeof(int)); 7 } 8 9 void CreateList(int *&L,int n,int *array) 10 { 11 int *c = L; 12 while(n--) 13 { 14 *c++ = *array++; 15 } 16 } 17 18 void InsertList(int *&l,int n,int item, int data) 19 { 20 int flag = n; 21 for(int i=0;i<n;i++) 22 { 23 if (l[i]==item) 24 { 25 flag = i; 26 } 27 } 28 29 /* 30 c库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。 31 该函数返回一个指针指向重新分配大小的内存; 32 ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针, 33 则会分配一个新的内存块,且函数返回一个指向它的指针。 34 size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。 35 */ 36 int *newbase =(int*)realloc(l,(n+1)*sizeof(int)); 37 l = newbase; 38 39 if (flag!=n) 40 { 41 int *q = &(l[flag]); 42 for(int *p = &(l[n-1]); p>=q; p--) 43 { 44 *(p+1) = *p; 45 } 46 *q = data; 47 } 48 else 49 { 50 int *p = &(l[n]); 51 *p = data; 52 } 53 } 54 55 void DisList(int *b,int n) 56 { 57 while(n--) 58 { 59 printf("%d ",*b++); 60 } 61 } 62 63 int main(int argc, char const *argv[]) 64 { 65 /*int n = 10; 66 int array[] = {10,20,30,40,50,60,70,80,90,100}; 67 int item = 50; 68 int data = 55;*/ 69 70 int n,item,data; 71 int *array; 72 scanf("%d",&n); 73 array = (int*)malloc(n*sizeof(int)); 74 for (int i = 0; i < n; ++i) 75 { 76 scanf("%d",&array[i]); 77 } 78 79 scanf("%d",&item); 80 scanf("%d",&data); 81 82 int *l; 83 InitList(l,n); 84 CreateList(l,n,array); 85 InsertList(l,n,item,data); 86 DisList(l,n+1); 87 return 0; 88 }