上课不仔细听讲的兔期末前的看课学习
通过学习郝斌老师的数据结构视频课,悲惨的兔终于有了点进步
这里分享一个老师演示的一串代码(兔跟着敲了好久,头秃了QAQ)
#include#include //bool的头文件 #include //malloc的头文件 #include //sizeof的头文件 #include //exit的头文件 //定义一个数据类型,有三个成员 struct Arr //数组 { int * pbase;//存储的数组第一个元素地址 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);//插入 pos从1开始 且在第pos前插入一个元素 bool delete_arr(struct Arr * pArr,int pos,int * pVal);//删除 int get(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() { struct Arr arr; int val; int kk; init_arr(&arr,10); printf("刚分好内存后显示数组:n"); show_arr(&arr); // printf("%d",arr.len); append_arr(&arr,1); append_arr(&arr,6); append_arr(&arr,8); append_arr(&arr,4); append_arr(&arr,3); append_arr(&arr,5); append_arr(&arr,7); append_arr(&arr,9); append_arr(&arr,10); printf("显示数组元素:n"); show_arr(&arr); printf("测试删除数组元素有:n"); if(delete_arr(&arr,2,&val)) { printf("删除成功!n"); printf("您删除的元素是:%dn",val); } else { printf("删除失败!n"); } printf("显示删除后的数组元素:n"); show_arr(&arr); printf("get到的位置的数为:n"); printf("%dn",get(&arr,6,&kk)); inversion_arr(&arr); printf("倒置是:n"); show_arr(&arr); printf("get到的位置的数为:n"); printf("%dn",get(&arr,6,&kk)); sort_arr(&arr); printf("排序有:n"); show_arr(&arr); printf("get到的位置的数为:n"); printf("%dn",get(&arr,6,&kk)); 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; } bool is_full(struct Arr * pArr) { if(pArr->cnt == pArr->len) return true; else return false; } bool append_arr(struct Arr * pArr,int val) { //满时返回false if(is_full(pArr)) return false; //不满时追加 pArr->pbase[pArr->cnt] = val; (pArr->cnt)++; return true; } void show_arr(struct Arr * pArr) { if( is_empty(pArr))//pArr已经就是地址 { printf("数组为空!n"); } else { for(int i = 0;i < pArr->cnt; ++i) printf("%d ",pArr->pbase[i]);//pArr是结构体变量的名字地址,pArr->pbase才是 printf("n"); } } bool insert_arr(struct Arr * pArr,int pos,int val) { int i; if(is_full(pArr)) return false; if(pos < 1 || pos > pArr->cnt + 1) //在pos前插入 return false; for(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(is_empty(pArr)) return false; *pVal = pArr->pbase[pos - 1]; if(pos < 1 || pos > pArr->cnt) return false; 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; if(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; int 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; } } } } int get(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]; return * pVal; }
下图是兔在codeblock上编译的结果
兔学到了很多,也非常感谢郝斌老师
兔会继续努力的!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)