顺序表插入操作的实现
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 }