数组?标题好像要长
程序代码:
# include <stdio.h> # include <malloc.h> //包含了malloc函数 # include <stdlib.h> //包含了exit函数 struct Arr { int * pBzse; //存储的是数组第一个元素的地址 int len ;//数据所能容纳的最大元素的个数 int cnt;//当前数组有效元素的个数 }; void init_arr(struct Arr * pArr, int length);//分号不能省 bool append_arr(struct Arr * pArr, int val);//追加 bool insert_arr(struct Arr * pArr, int pos, int val);//poss的值从1开始 bool delete_arr(struct Arr * pArr, int pos, int * pVal); bool is_empty(struct Arr * pArr); bool is_full(struct Arr * pArr); void sort_arr(struct Arr * pArr); void show_arr(struct Arr * pArr); void inversion_arr(struct Arr * pArr); int main(void) { struct Arr arr; int val; init_arr(&arr, 6); show_arr(&arr); append_arr(&arr, 1); append_arr(&arr, 10); append_arr(&arr, -3); append_arr(&arr, 6); append_arr(&arr, 88); append_arr(&arr, 11); if ( delete_arr(&arr, 4, &val) ) { printf("删除成功!\n"); printf("您删除的元素是: %d\n", val); } else { printf("删除失败!\n"); } show_arr(&arr); inversion_arr(&arr); show_arr(&arr); sort_arr(&arr); show_arr(&arr); return 0; } void init_arr(struct Arr * pArr, int length) { pArr->pBzse = (int *)malloc(sizeof(int) * length); if (NULL == pArr->pBzse) { printf("动态内在分配失败!\n"); exit(-1);//终止整个程序 } else { pArr->len = length; pArr->cnt = 0; } return; } bool is_full(struct Arr * pArr) { if (pArr->cnt == pArr->len) return true; else return false; } bool is_empty(struct Arr * pArr)// { if(0 == pArr->cnt) return true; else return false; } void show_arr(struct Arr * pArr) { if ( is_empty(pArr) ) { printf("数组为空!\n"); } else { for (int i=0; i<pArr->cnt; ++i) printf("%d ", pArr->pBzse[i]); printf("\n"); } } bool append_arr(struct Arr * pArr, int val) { //满时返回false if( is_full(pArr) ) return false; //不满时追加 pArr->pBzse[pArr->cnt] = val; (pArr->cnt)++; return true; } bool insert_arr(struct Arr * pArr, int pos, int val) { int i; if( is_full(pArr) ) return false; if(pos<1 || pos>pArr->len+1) return false; for(i=pArr->cnt-1; i>=pos-1; --i) { pArr->pBzse[i+1] = pArr->pBzse[i]; } pArr->pBzse[pos-1] = val; return true; } bool delete_arr(struct Arr * pArr, int pos, int * pVal) { int i ; if ( is_empty(pArr) ) return false; if(pos<1 || pos>pArr->cnt) return false; *pVal = pArr->pBzse[pos-1]; for (i=pos; i<pArr->cnt; ++i) { pArr ->pBzse[i-1] = pArr->pBzse[i]; } pArr->cnt--; // pArr->pBase[pos-1] = val; // (pArr->cnt)++; return true; } void inversion_arr(struct Arr * pArr) { int i = 0; int j = pArr->cnt-1; int t; while (i < j) { t = pArr->pBzse[i]; pArr->pBzse[i] = pArr->pBzse[j]; pArr->pBzse[j] = t; ++i; --j; } return; } void sort_arr(struct Arr * pArr) { int i, j, t; for (i=0; i<pArr->cnt; ++i) { for (j=i+1; j<pArr->cnt; ++j) { if (pArr->pBzse[i] > pArr->pBzse[j]) { t = pArr->pBzse[i]; pArr->pBzse[i] = pArr->pBzse[j]; pArr->pBzse[j] = t; } } } return; }