论代码注释的重要性,
有时可能有些代码自己真的以后都用不上了,但是当有一天你回头看到之前写的代码也是一种让人回忆的东西
下面时2015年时写的一段C语言代码。其实有时候学会一些算法真的不在于用什么语言。我学C语言入门的,但是在学java时就很顺畅。
这个c语言版本的链表注释还算清晰。可参考学习
#include<stdio.h> //标准输入输出函数 #include<malloc.h>//包含了malloc函数 #include<stdlib.h>//包含了exit函数 /* 2015年10月3日20:54:39 连续数组储存问题,为学链表做铺垫,2019_5_22当时写的不太对,其实此程序已经算是一个半成品的链表了。 函数意思以确定,但本程序内含有大量算法,以后可以自己琢磨下, */ //定义的了一个数据类型,而不是变量,该数据类型的名字叫做struct Arr //该数据类型含有三个成员,分别是:pBase,len,cnt struct Arr { int * pBase;//存储的是数组第一个元素地址 int len; //数组所能容纳的最大元素的个数 int cnt; //当前数组有效元素的个数 }; void init_arr(struct Arr * pArr,int length); //定义初始化函数,动态分配空间,并赋值;pArr是用来储存数组的第一位地址的参数,lenth是用来让用户输入数组的长度的 bool append_arr(struct Arr * pArr,int val); //定义追加函数,就是在最末尾加上一个元素 bool insert_arr(struct Arr *,int pos,int val); //定义插入函数,pos的值从1开始, bool delete_arr(struct Arr *,int pos,int *pval);//定义删除函数,删除某个特定的元素 bool is_empt(struct Arr *pArr); //定义是否为空函数,判断数组是否为空的函数 bool is_full(struct Arr *pArr); //定义是否存满函数,判断数组是否存满的函数 void sort_arr(struct Arr *pArr); //定义倒置函数,把所以的元素倒置排序 void show_arr(struct Arr *pArr); //定义输出函数,内部还是用printf()函数 int get(); //有空字节实现 void inversion_arr(struct Arr *pArr); //定义排序函数 //后续待添加 数组自动扩容,可以根据is_full来判断是否需要扩容 //主函数***************************************************************************************************************************************************************************************** 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,-1,&val)) { printf("删除成功! "); printf("你删除的元素是:%d ",val); } else { printf("删除失败! ");//删除失败的条件是delete_arr()中第二个参数的范围,必须在0到数组最大长度 } show_arr(&arr); inversion_arr(&arr); printf("倒置之后的数组内容是: "); show_arr(&arr); sort_arr(&arr); show_arr(&arr); /* append_arr(&arr,2); append_arr(&arr,3); append_arr(&arr,4); append_arr(&arr,5); append_arr(&arr,7); insert_arr(&arr,1,99); show_arr(&arr); append_arr(&arr,6); show_arr(&arr); //本人感觉此函数过分调用函数,画蛇添足了,不太好,完全可以用一次函数完成 //其中还调用了两次函数,第一次把两个参数发送到bool append_arr()函数, //&arr是这个函数的首地址,即让append_arr()函数中的pArr指针指向arr这个函数 //又调用函数is_full()函数判断数组是否已经存满, 满返回真,不满返回假,根据真假, //if真则满返回append_arr()函数假,假则不满把8添加到尾部并返回真 //最后还要用if判断append_arr()函数真假,却只做提示成功或者失败, if(append_arr(&arr,8)) { printf("追加成功 "); } else { printf("追加失败 "); } */ // printf("%d ",arr.len); // free(pArr->pBase); return 0; } //初始化函数************************************************************************************************************************************************************************************** void init_arr(struct Arr * pArr,int length) { pArr->pBase = (int *)malloc(sizeof(int)*length);//lenth是用户输入的数组长度,sizeof(int)的长度*lenth是数组总长度, //malloc()函数来动态分配这个数组的空间,(前边int*),把所分配的数组的首地址存在pArr->pBase中,即用pArr->pBase来存储分配的数组的首地址 if(NULL == pArr->pBase) { printf("动态内存分配失败! "); exit(-1);//终止整个程序 } else { printf("动态内存分配成功! "); pArr->len = length; pArr->cnt = 0; } free(pArr->pBase); //(*pArr).len = 99 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; } //输出函数***************************************************************************************************************************************************************************************** void show_arr(struct Arr *pArr) { if(is_empty(pArr))//如果数组为空,就提示,不为空,就用for把所以的值输出 { printf("数组为空! "); } else { for(int i=0;i<pArr->cnt;i++)//for的作用是把数组中的所以数都输出 printf("%d ",pArr->pBase[i]);//%d后面有空格,在输出上好区分数字 printf(" "); } } //追加函数***************************************************************************************************************************************************************************************** bool append_arr(struct Arr * pArr,int val) { //满是返回false 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) //假设pos是3,val是88,则在第3为前插入88,但后面的数就要往后移动 { int i; if(is_full(pArr)) return false; if(pos<1 || pos>pArr->cnt+1)// 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) { int i; if(is_empty(pArr)) return false; if(pos<1 || pos>pArr->cnt) return false; *pVal = pArr->pBase[pos-1]; for(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,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; } } } } //**************************************************************************************************************************************************************************************************
这个代码里面已经涉及了一些排序啊,倒序之类的,。