连续存储

mac2022-06-30  84

#include<stdio.h> #include<malloc.h> #include<stdlib.h> struct Arr { int * pBase; //数组第一个元素的地址 int len; //数组长度 int cnt; //数组有效元素的个数 }; void init_arr(struct Arr * pArr , int length); int append_arr(struct Arr * pArr , int val); void insert_arr(struct Arr * pArr , int pos , int val); void delete_arr(struct Arr * pArr , int pos , int * pVal); int get(); int is_empty(struct Arr * pArr); int 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) { int pos; struct Arr arr; /* 初始化array */ init_arr(&arr,5); /* 添加元素 */ append_arr(&arr,1); append_arr(&arr,2); append_arr(&arr,3); append_arr(&arr,4); /* 插入元素 */ insert_arr(&arr,3,999); /* 删除元素 */ delete_arr(&arr,2,&pos); printf("删除元素-->%d\n",pos); /* 排序 */ sort_arr(&arr); /* 遍历数组 */ show_arr(&arr); /* --------------------- */ printf("%d\n",arr.len); 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) { int i; if(is_empty(pArr)) { printf("数组为空!\n"); } else { for(i=0;i<pArr->cnt;i++) { printf("arr[%d]-->%d\n",i,pArr->pBase[i]); } } } int is_empty(struct Arr * pArr) { if(0 == pArr->cnt) { return 1; } else { return 0; } } int is_full(struct Arr * pArr) { if(pArr->cnt == pArr->len) { return 1; } else { return 0; } } int append_arr(struct Arr * pArr , int val) { if(is_full(pArr)) { //数组已满,不能追加 printf("数组已满,不能追加!\n"); exit(-1); } else { pArr->pBase[pArr->cnt] = val; (pArr->cnt)++; } return 0; } /* * 在位置为pos元素前面插入val, pos的值从1开始 */ void insert_arr(struct Arr * pArr , int pos , int val) { if(pos < 0 || pos > pArr->cnt) { printf("输入下标错误!\n"); return; } if(is_full(pArr)) { printf("数组已满,不能插入!\n"); return; } int i; for(i=pArr->cnt;i>=pos;i--) { pArr->pBase[i] = pArr->pBase[i-1]; } pArr->pBase[pos-1] = val; (pArr->cnt)++; } void delete_arr(struct Arr * pArr , int pos , int * pVal) { int i; if(is_empty(pArr)){ return; } if(pos < 1 || pos > pArr->cnt) { return; } //保留被删除的元素 *pVal = pArr->pBase[pos-1]; for(i=pos;i<pArr->cnt;i++) { pArr->pBase[i-1] = pArr->pBase[i]; } (pArr->cnt)--; } 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;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; } } } return; }

转载于:https://www.cnblogs.com/xpeng-V/p/7349673.html

最新回复(0)