运行结果:
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <memory.h>
4 #define datatype int
5
6 struct array
7 {
8 datatype *pstart;//数组首地址
9 datatype length;//长度
10 datatype sortstate;//有序或者无序
11 };
12
13 //初始化数组
14 void init(struct array *parray);
15 //用数据进行初始化
16 void initWithData(struct array *parr, datatype data);
17 //用数组进行初始化
18 void initWithArray(struct array *parr, datatype *pdata, int dataLength);
19 //显示数据
20 void show(struct array *parr);
21 //尾部添加数据
22 void addobject(struct array *parr, datatype data);
23 //尾部添加数组
24 void addobjects(struct array *parr, datatype *pdata, int dataLength);
25 //返回第一个找到的元素位置
26 datatype *findfirst(struct array *parr, datatype data);
27 //在指定位置前插入数据
28 void insertobject(struct array *parr, datatype data, datatype insertdata);
29 //在指定位置之前插入数组
30 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength);
31 //删除所有元素
32 void deleteallobject(struct array *parr, datatype data);
33
34 //初始化数组
35 void init(struct array *parray)
36 {
37 if (parray != NULL)
38 {
39 parray->pstart = NULL;
40 parray->length = 0;
41 parray->sortstate = 0;
42 }
43 else
44 {
45 printf("init error");
46 }
47 }
48
49 //用数据进行初始化
50 void initWithData(struct array *parr, datatype data)
51 {
52 if (parr != NULL)
53 {
54 parr->pstart = (datatype *)malloc(sizeof(datatype));
55 *(parr->pstart) = data;
56 parr->length = 1;
57 parr->sortstate = 0;
58 }
59 else
60 {
61 printf("initWithData error");
62 }
63
64 }
65
66 //用数组进行初始化
67 void initWithArray(struct array *parr, datatype *pdata, int dataLength)
68 {
69 if (parr != NULL)
70 {
71 parr->pstart = (datatype *)malloc(sizeof(datatype)*dataLength);//分配数组的长度
72 memcpy(parr->pstart, pdata, sizeof(datatype)*dataLength);
73 parr->length = dataLength;
74 parr->sortstate = 0;
75 }
76 else
77 {
78 printf("initWithArray error");
79 }
80
81 }
82
83 //显示数据
84 void show(struct array *parr)
85 {
86 if (parr == NULL || parr->pstart == NULL || parr->length == 0)
87 {
88 printf("没有数据
");
89 }
90 else
91 {
92 for (int i = 0; i < parr->length; i++)
93 {
94 printf("%4d", parr->pstart[i]);//打印数据
95 }
96 printf("
");
97 }
98 }
99
100 //尾部添加数据
101 void addobject(struct array *parr, datatype data)
102 {
103 if (parr != NULL)
104 {
105 if (parr->pstart == NULL || parr->length == 0)
106 {
107 initWithData(parr, data);
108 }
109 else
110 {
111 parr->pstart = (datatype *)realloc(parr->pstart, (parr->length +1 )*sizeof(datatype));
112 parr->pstart[parr->length] = data;//插入
113 parr->length += 1;//长度加1
114 }
115 }
116 else
117 {
118 printf("addobject error");
119 }
120 }
121
122 //尾部添加数组
123 void addobjects(struct array *parr, datatype *pdata, int dataLength)
124 {
125
126 if (parr != NULL)
127 {
128 if (parr->pstart == NULL || parr->length == 0)
129 {
130 initWithArray(parr, pdata, dataLength);
131 }
132 else
133 {
134 parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + dataLength) * sizeof(pdata) );
135
136 memcpy(parr->pstart + parr->length, pdata, dataLength * sizeof(datatype));
137
138 parr->length += dataLength;//长度自增
139 }
140 }
141 else
142 {
143 printf("addobject error");
144 }
145 }
146
147 //返回第一个找到的元素位置
148 datatype *findfirst(struct array *parr, datatype data)
149 {
150 if (parr == NULL || parr->pstart == NULL || parr->length == 0)
151 {
152 printf("没有数据
");
153 return NULL;
154 }
155 else
156 {
157
158 datatype *pfind = NULL;
159 for (int i = 0; i < parr->length; i++)
160 {
161 if (parr->pstart[i] == data)
162 {
163 pfind = &parr->pstart[i];
164 break;
165 }
166 }
167 return pfind;
168 }
169 }
170
171 //在指定位置前插入数据
172 void insertobject(struct array *parr, datatype data, datatype insertdata)
173 {
174 if (parr != NULL)
175 {
176 datatype *pfind = findfirst(parr, data);
177 if (pfind == NULL)
178 {
179 printf("can not insertobject");
180 }
181 else
182 {
183 int curr = pfind - parr->pstart;//指针相减确定下标
184 parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + 1) * sizeof(datatype));
185
186 for (int i = parr->length; i > curr; i--)
187 {
188 parr->pstart[i] = parr->pstart[i - 1];
189 }
190 parr->pstart[curr] = insertdata;
191
192 parr->length += 1;//长度加1
193 }
194 }
195 else
196 {
197 printf("insertobject error
");
198 }
199 }
200
201 //在指定位置前插入数组
202 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength)
203 {
204 if (parr != NULL)
205 {
206 datatype *pfind = findfirst(parr, data);
207 if (pfind == NULL)
208 {
209 printf("can not insertobject");
210 }
211 else
212 {
213 int curr = pfind - parr->pstart;//指针相减确定下标
214 parr->pstart = (datatype *)realloc(parr->pstart, (parr->length + datalength) * sizeof(datatype));
215
216 for (int i = parr->length + datalength ; i >= curr+datalength; i--)
217 {
218 parr->pstart[i] = parr->pstart[i - datalength];
219 }
220
221 for (int i = 0; i < datalength; i++)
222 {
223 parr->pstart[curr + i] = pdata[i];
224 }
225
226 parr->length += datalength;//长度加1
227 }
228 }
229 else
230 {
231 printf("insertobject error
");
232 }
233 }
234
235 //删除所有元素
236 void deleteallobject(struct array *parr, datatype data)
237 {
238 int start = 0;
239 int youbiao = 0;
240 int count = 0;
241
242 for (int i = 0; i < parr->length; i++)
243 {
244 if (parr->pstart[i] == data)
245 {
246 count++;
247 youbiao++;
248 }
249 else
250 {
251 parr->pstart[start] = parr->pstart[youbiao];
252 start++;
253 youbiao++;
254 }
255 }
256 parr->length -= count;
257 }
258
259 void main()
260 {
261 struct array *mydata = new struct array;
262 int a[10] = { 1,2,1,4,1,6,7,8,9,10 };
263 int b[6] = { 11,12,13,14,15 ,16};
264 initWithArray(mydata, a, 10);
265 show(mydata);
266 /*addobjects(mydata, b, 5);
267 show(mydata);*/
268 /*insertobject(mydata, 8, 11);
269 show(mydata);*/
270 //insertobjects(mydata, 1, b, 6);
271 //show(mydata);
272 deleteallobject(mydata, 1);
273 show(mydata);
274
275 system("pause");
276 }