myArray.h :
#pragma once //包含的時候只包含一次 #include <stdio.h> #include <stdlib.h> #include <string.h> #define datatype int struct array { datatype *pstart; //數組首地址 int length; //長度 int sortstat; //有序或者無序,0無序,1有序 }; void init(struct array *parr); //初始化 void initWithData(struct array *parr, datatype data); //初始化並插入數據 void initWithArr(struct array *parr, datatype *pdata, int datalength); //初始化並插入數組 void show(struct array *parr); //顯示 datatype *findfirst(struct array *parr, datatype data); //查找元素,找到返回地址,沒找到返回NULL void addobject(struct array *parr, datatype data); //尾部插入一個數據 void addobjects(struct array *parr, datatype *pdata,int datalength); //尾部插入一個數組 void insertobject(struct array *parr, datatype data, datatype insertdata); //任意位置插入一個數據 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength); //任意位置插入一個數組
myArray.c :
#include "myArray.h" //初始化 void init(struct array *parr) { if (parr != NULL) { parr->pstart = NULL; parr->length = 0; parr->sortstat = 0; } else printf("init Error!\n"); } //初始化並插入數據 void initWithData(struct array *parr, datatype data) { if (parr != NULL) { parr->pstart = malloc(sizeof(datatype)); *(parr->pstart) = data; //初始化 parr->length = 1; parr->sortstat = 0; } else printf("initWithData Error!\n"); } //初始化並插入數組 void initWithArr(struct array *parr, datatype *pdata, int datalength) { if (parr != NULL) { parr->pstart = malloc(sizeof(datatype)*datalength); //分配數組長度的內存 memcpy(parr->pstart, pdata, sizeof(datatype)*datalength); //內存拷貝 parr->length = datalength; parr->sortstat = 0; } else printf("initWithArr Error!\n"); } //顯示 void show(struct array *parr) { if (parr == NULL || parr->pstart == NULL || parr->length == 0) { printf("沒有數據,無法打印\n"); return; } else { printf("\n數組此時狀態:\n"); for (int i = 0; i < parr->length; i++) { printf("%4d", parr->pstart[i]); //打印數據 } } } //尾部插入一個數據 void addobject(struct array *parr, datatype data) { if (parr != NULL) { if (parr->pstart == NULL || parr->length == 0) initWithData(parr, data); else { parr->pstart = realloc(parr->pstart, (parr->length + 1) * sizeof(datatype));//拓展內存 parr->length += 1; //長度加一 parr->pstart[parr->length] = data; //插入 } } else printf("addobject Error!\n"); } //尾部插入一個數組 void addobjects(struct array *parr, datatype *pdata, int datalength) { if (parr != NULL) { if (parr->pstart == NULL || parr->length == 0) initWithArr(parr, pdata, datalength); else { parr->pstart = realloc(parr->pstart, (parr->length + datalength)*sizeof(datatype));//拓展內存 memcpy(parr->pstart + parr->length, pdata, datalength * sizeof(datatype)); parr->length += datalength; //插入 } } else printf("addobjects Error!\n"); } //查找元素,找到返回地址,沒找到返回NULL datatype *findfirst(struct array *parr, datatype data) { if (parr == NULL || parr->pstart == NULL || parr->length == 0) { printf("沒有數據,無法查找\n"); return NULL; } else { int *pfind = NULL; for (int i = 0; i < parr->length; i++) { if (parr->pstart[i] == data) { pfind = &parr->pstart[i]; break; } } return pfind; } } //任意位置插入一個數據 void insertobject(struct array *parr, datatype data, datatype insertdata) { if (parr != NULL) { datatype *pfind = findfirst(parr, data); if(pfind==NULL) printf("can not insertobject Error!\n"); else { int cur = pfind - parr->pstart; //指針相減確定下標 parr->pstart = realloc(parr->pstart, (parr->length +1) * sizeof(datatype)); for (int i = parr->length - 1; i >= cur; i--) { parr->pstart[i + 1] = parr->pstart[i]; //往后移動 } parr->pstart[cur] = insertdata; //插入數據 parr->length += 1; //長度增加 } } else printf("insertobject Error!\n"); } //任意位置插入一個數組 void insertobjects(struct array *parr, datatype data, datatype *pdata, int datalength) { if (parr != NULL) { datatype *pfind = findfirst(parr, data); if (pfind == NULL) printf("can not insertobject Error!\n"); else { int cur = pfind - parr->pstart; //指針相減確定下標 parr->pstart = realloc(parr->pstart, (parr->length + datalength) * sizeof(datatype)); for (int i = parr->length - 1; i >= cur; i--) { parr->pstart[i + datalength] = parr->pstart[i]; //往后移動 } memcpy(parr->pstart + cur, pdata, datalength * sizeof(datatype));//插入數據 parr->length += datalength; //長度增加 } } else printf("insertobjects Error!\n"); }
main.c :
#include "myArray.h" void main() { struct array mydata; int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; int b[5] = { 11,12,13,14,15 }; int c[3] = { 21,22,23 }; initWithArr(&mydata, a, 10); //初始化數組 show(&mydata); addobjects(&mydata, b, 5); //尾部插入數組b show(&mydata); addobjects(&mydata, c, 3); //尾部插入數組c show(&mydata); insertobject(&mydata, 21, 666); show(&mydata); insertobjects(&mydata, 6, c, 3); show(&mydata); system("pause"); }