C语言 -----动态数组算法实现

来源:互联网 发布:线程数据传递 编辑:程序博客网 时间:2024/05/21 19:23
#include <stdio.h>#include <stdlib.h>struct Arr{int * pBase; //存储的是数组第一个元素的地址int len; //数组所能容纳的最大元素的个数int cnt; //当前 数组有效元素的个数//int increment; //自动增长因子};void init_arr(struct Arr *, int);bool append_arr(struct Arr *,int);bool insert_arr(struct Arr *, int, int);bool delete_arr(struct Arr * pArr, int pos, int *pVal);int get();bool is_empty(struct Arr *);bool is_full(struct Arr *);void sort_arr(struct Arr *);void show_arr(struct Arr *);void inversion_arr(struct Arr *);int main(void){struct Arr arr;init_arr(&arr,10);printf("%d\n",arr.len);show_arr(&arr);append_arr(&arr,1);append_arr(&arr,2);append_arr(&arr,3);if(append_arr(&arr,8)){printf("********************\n");}show_arr(&arr);int val;if(delete_arr(&arr,5, &val)){printf("删除成功!\n");printf("您要删除的元素是:%d\n",val);}else {printf("删除失败!\n");}show_arr(&arr);inversion_arr(&arr);show_arr(&arr);sort_arr(&arr);printf("asc排序----------输出-------------\n");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;}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->pBase[i]);}printf("\n");}}bool is_full(struct Arr * pArr){if(pArr->cnt == pArr->len){return true;}else{return false;}}bool append_arr(struct Arr * pArr, int val){if(is_full(pArr)){return false;}else{pArr->pBase[pArr->cnt] = val;(pArr->cnt)++;return true;}}bool insert_arr(struct Arr * pArr, int pos, int val){int i;for(i=pArr->cnt-1; i>=pos-1; i--){pArr->pBase[i+1] = pArr->pBase[i];//往后移}pArr->pBase[pos-1] = val;return true;}bool delete_arr(struct Arr * pArr, int pos, int *pVal){if(is_empty(pArr)){return false;}if(pos<1 || pos>pArr->cnt){return false;}*pVal = pArr->pBase[pos-1];for(int i=pos; i<pArr->cnt; i++){pArr->pBase[i-1] = pArr->pBase[i];//往前移}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->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;++i;--j;}return;}void sort_arr(struct Arr * pArr){int i,j,t;for(i=0; i<pArr->cnt-1; i++){for(j=i+1; j<pArr->cnt; j++){if(pArr->pBase[i] > pArr->pBase[j]){t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;}}}}

原创粉丝点击