1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef int type;
5
6 int max = 10;
7
8 struct List
9 {
10 type *head;
11 int length;
12 };
13
14 int init(struct List *a);
15 int insert(struct List *a, type x);
16 void print(struct List a);
17 int delete_index(struct List *a, int index);
18 int update_index(struct List *a, int index, type x);
19 int quary(struct List a, type x);
20 void empty(struct List *a);
21 int in_index(struct List *a, type index, type x);
22 int main()
23 {
24 int i, ret;
25 struct List a;
26 ret = init(&a);
27 if (-1 == ret)
28 {
29 return -1;
30 }
31 for (i = 0; i < 20; i++)
32 {
33 ret = insert(&a, i);
34 if (-1 == ret)
35 {
36 return -1;
37 }
38 }
39 print(a);
40 delete_index(&a, 2);
41 print(a);
42 delete_index(&a, 22);
43 update_index(&a, 2, 99);
44 print(a);
45 update_index(&a, 22, 99);
46 ret = quary(a, 5);
47 if (-1 == ret)
48 {
49 return -1;
50 }
51 printf("%d\n", ret);
52 ret = in_index(&a, 10, 34);
53 if (-1 == ret)
54 {
55 return -1;
56 }
57 print(a);
58 empty(&a);
59
60 return 0;
61 }
62
63 int init(struct List *a)
64 {
65 a->head = (type*)malloc(max*(sizeof(type)));
66 if (NULL == a->head)
67 {
68 return -1;
69 }
70 a->length = 0;
71
72 return 1;
73 }
74
75 int insert(struct List *a, type x)
76 {
77 if (max == a->length)
78 {
79 a->head = (type*)realloc(a->head,sizeof(type)*(max + max/2));
80 if (NULL == a->head)
81 {
82 return -1;
83 }
84 max += max/2;
85 printf("after realloc max = %d\n", max);
86 }
87 *(a->head + a->length) = x;
88 a->length++;
89 }
90
91 int delete_index(struct List *a, int index)
92 {
93 if (index < 0 || index >= a->length)
94 {
95 printf("delete index out of rage\n");
96 return -1;
97 }
98 int i;
99 for (i = 0; i < a->length - index; i++)
100 {
101 *(a->head + index + i) = *(a->head + index + i +1);
102 }
103 a->length--;
104 return 1;
105 }
106
107 int update_index(struct List *a, int index, type x)
108 {
109 if (index < 0 || index >= a->length)
110 {
111 printf("update index out of rage\n");
112 return -1;
113 }
114 *(a->head + index) = x;
115 }
116
117 int quary(struct List a, type x)
118 {
119 int i;
120 for (i = 0; i < a.length; i++)
121 {
122 if (*(a.head + i) == x)
123 {
124 return i;
125 }
126 }
127 return -1;
128
129 }
130
131 int in_index(struct List *a, type index, type x)
132 {
133 int i;
134 if (index < 0 || index >= a->length)
135 {
136 printf("update index out of rage\n");
137 return -1;
138 }
139 if (max == a->length)
140 {
141 printf("jia leicun\n");
142 a->head = (type*)realloc(a->head,sizeof(type)*(max + max/2));
143 max += max/2;
144 }
145 for (i = a->length - 1; i >= index; i--)
146 {
147 *(a->head + i + 1) = *(a->head + i);
148 }
149 *(a->head + index) = x;
150 return 1;
151 }
152 void empty(struct List *a)
153 {
154 free(a->head);
155 a->head = NULL;
156 a->length = 0;
157 max = 10;
158 }
159 void print(struct List a)
160 {
161 int i;
162 for (i = 0; i < a.length; i++)
163 {
164 printf("%d ",*(a.head + i));
165 }
166 printf("\n");
167 }
heap堆内存顺序表
最新推荐文章于 2021-06-15 19:34:36 发布