不多说直接上代码:
#include#include #include struct Arr { int *pBase; int len; int cnt;};void init_arr(struct Arr *pArr,int length);//初始化一个数组void show_arr(struct Arr *pArr);//显示某一个数组bool isEmpty(struct Arr *pArr);//判断一个数组是不是空的bool append(struct Arr *pArr,int val);//追加bool is_full(struct Arr *pArr);bool inserst(struct Arr *pArr,int pos,int val);bool delete_arr(struct Arr *pArr,int pos,int *pVal);bool getElement(struct Arr *pArr,int pos,int *pVal);void sort_arr(struct Arr *pArr);void inversion_arr(struct Arr *pArr);int main(void) { int val; struct Arr arr; init_arr(&arr,9); show_arr(&arr); append(&arr,1); append(&arr,2); show_arr(&arr); inserst(&arr,1,8); inserst(&arr,2,9); show_arr(&arr); delete_arr(&arr,2,&val); printf("删除的是第2个位置的值为%d\n",val); show_arr(&arr); getElement(&arr,2,&val); printf("得到的值是:%d\n",val); sort_arr(&arr); printf("排序\n"); show_arr(&arr); printf("倒置\n"); inversion_arr(&arr); show_arr(&arr); return 0;}//初始化一个数组void init_arr(struct Arr *pArr,int length) { pArr->pBase = (int *)malloc(sizeof(int)*length); if(NULL == pArr->pBase) { printf("动态分配内存失败\n"); exit(-1); } else { pArr->len = length; pArr->cnt = 0; } return;}//显示数组中的具体内容void show_arr(struct Arr *pArr) { if(isEmpty(pArr)) { printf("数组为空\n"); } else { for(int i=0; i cnt; i++) { printf("%d ",pArr->pBase[i]); } printf("\n"); }}//判断一个数组是不是空的bool isEmpty(struct Arr *pArr) { if( 0 == pArr->cnt) { return true; } else { return false; }}//追加参数bool append(struct Arr *pArr,int val) { if(is_full(pArr)) { printf("数组已满,不宜插入\n"); return false; } else { pArr->pBase[pArr->cnt] = val; pArr->cnt++; return true; }}//判断数组是不是已经满了bool is_full(struct Arr *pArr) { if(pArr->len == pArr->cnt) { return true; } else { return false; }}//向数组中插入数据bool inserst(struct Arr *pArr,int pos,int val) { if(pos<1 || pos>pArr->cnt+1) { printf("插入位置有误\n"); return false; } if(is_full(pArr)) { printf("数组已满\n"); return false; } for(int i=pArr->cnt-1; i>=pos-1; i--) { pArr->pBase[i+1] = pArr->pBase[i]; } pArr->pBase[pos-1] = val; pArr->cnt++; return true;}//删除指定位置的值bool delete_arr(struct Arr *pArr,int pos,int *pVal) { if(isEmpty(pArr)) { printf("数组为空!\n"); return false; } if(pos<1 || pos>pArr->cnt) { printf("要删除位置的值不存在\n"); return false; } *pVal = pArr->pBase[pos-1]; for(int i =pos; i cnt; i++) { pArr->pBase[i-1] = pArr->pBase[i]; } pArr->cnt--; return true;}//得到相对应位置的参数bool getElement(struct Arr *pArr,int pos,int *pVal) { if(isEmpty(pArr)) { printf("数组为空!\n"); return false; } if(pos<1 || pos>pArr->cnt) { printf("位置的值不存在\n"); return false; } *pVal = pArr->pBase[pos-1]; return true;}//将相对应的数组进行一定规模的排序void sort_arr(struct Arr *pArr) { int t; if(isEmpty(pArr)) { return; } for(int i=0; i cnt; i++) { for(int j=i+1; j cnt; j++) { if(pArr->pBase[i]>pArr->pBase[j]) { t = pArr->pBase[i]; pArr->pBase[i] = pArr->pBase[j]; pArr->pBase[j] = t; } } }}//将数组倒置void inversion_arr(struct Arr *pArr) { int t; if(isEmpty(pArr)) { return; } int i = 0; int j = pArr->cnt-1; while(i pBase[i]; pArr->pBase[i] = pArr->pBase[j]; pArr->pBase[j] = t; i++; j--; }}
这一个主要就是和上面的顺序表相互补充,可以相互借鉴,这个应该是最原始的版本了.
如果有问题请@楼主。