``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <malloc.h> /* 线性结构 把所有的节点用一根直线穿起来 连续存储 数组 离散存储 链表 应用: 栈:内存分配,函数调用 队列:时间操作 */ /*=================================== Part1.数组底层操作开发 什么是数组:元素类型、大小相同 优缺点(与链表相比): ===================================*/ /*=================================== 数组的形式 0 1 2 3 4 1 2 3 4 5 ===================================*/ /* 定义了一个数据类型,该数据的类型的名字叫 Struct Arr,该数据类型含有三个成员 */ struct Arr{ int *pBase;//存储的是数组第一个元素的地址 int len;//数组所能容纳的最大元素的个数 int cnt;//当前数组有效元素的个数 //int increment;//数组长度自动增长因子 }; 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);//pos值从1开始,放在pos前面 bool delete_arr(struct Arr *pArr,int pos);//删除,pos值从1开始 int get(struct Arr *pArr,int pos);//获取下标对应的值 bool is_empty(struct Arr *pArr); bool is_full(struct Arr *pArr); void show_arr(struct Arr *pArr); void inversion_arr(struct Arr *pArr);//倒置 void sort_arr(struct Arr *pArr);//排序 int main() { struct Arr arr;//数据类型 struct Arr 变量 arr init_arr(&arr,10); append_arr(&arr,1); append_arr(&arr,2); append_arr(&arr,3); insert_arr(&arr,2,99); /*show_arr(&arr); printf("\n"); if(append_arr(&arr,3)){ printf("追加成功!"); }else{ printf("追加失败!"); } printf("\n");*/ //delete_arr(&arr,3); show_arr(&arr); printf("\n"); if(is_empty(&arr)){ printf("错误!"); }else{ printf("%d",get(&arr,3)); } printf("\n"); inversion_arr(&arr); printf("\n"); sort_arr(&arr); return 0; } void sort_arr(struct Arr *pArr){ int i,j,t; if(is_empty(pArr)){ printf("数组为空!\n"); }else{ 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; } } } } for(int i=0;i<pArr->cnt;i++){ printf("%d ",pArr->pBase[i]); } } void inversion_arr(struct Arr *pArr){ if(is_empty(pArr)){ printf("数组为空!\n"); }else{ for(int i=pArr->cnt-1;i>=0;i--){ printf("%d ",pArr->pBase[i]); } } } int get(struct Arr *pArr,int pos){ if(pos>pArr->cnt){ return 0; }else{ return pArr->pBase[pos-1]; } } bool delete_arr(struct Arr *pArr,int pos){ if(is_empty(pArr)){ return false; }else{ for(int i=pos;i<=pArr->cnt-1;i++){ pArr->pBase[i-1] = pArr->pBase[i]; } pArr->cnt--; return true; } } 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(is_empty(pArr)){ printf("数组为空!\n"); }else{ for(int i=0;i<pArr->cnt;i++){ printf("%d ",pArr->pBase[i]); } } } bool is_empty(struct Arr *pArr){ if(pArr->cnt==0){ 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 is_full(struct Arr *pArr){ if(pArr->cnt==pArr->len){ return true; }else{ return false; } } bool insert_arr(struct Arr *pArr,int pos,int val){ if(is_full(pArr)||pos<1||pos>pArr->cnt+1){ return false; }else{ 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; } } ```
Click here to view the copyright notice of this site(点击此处查看本站版权声明)
必须 注册 为本站用户, 登录 后才可以发表评论!