50.商业化数组库开发

运行结果:  
  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("没有数据\n");
 89     }
 90     else
 91     {
 92         for (int i = 0; i < parr->length; i++)
 93         {
 94             printf("%4d", parr->pstart[i]);//打印数据
 95         }
 96         printf("\n");
 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("没有数据\n");
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\n");
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\n");
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 }

 

posted @ 2018-01-29 12:01  喵小喵~  阅读(156)  评论(0编辑  收藏  举报