50.商業化數組庫開發
阿新 • • 發佈:2018-01-29
void star log clas 初始 i++ body array truct
運行結果:
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(structarray *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, intdatalength); 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 }
50.商業化數組庫開發