论代码注释的重要性,
有时可能有些代码自己真的以后都用不上了,但是当有一天你回头看到之前写的代码也是一种让人回忆的东西
下面时2015年时写的一段C语言代码。其实有时候学会一些算法真的不在于用什么语言。我学C语言入门的,但是在学java时就很顺畅。
这个c语言版本的链表注释还算清晰。可参考学习
#include //标准输入输出函数
#include//包含了malloc函数
#include//包含了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("删除成功!\n");
printf("你删除的元素是:%d\n",val);
}
else
{
printf("删除失败!\n");//删除失败的条件是delete_arr()中第二个参数的范围,必须在0到数组最大长度
}
show_arr(&arr);
inversion_arr(&arr);
printf("倒置之后的数组内容是:\n");
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("追加成功\n");
}
else
{
printf("追加失败\n");
}
*/
//printf("%d\n",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("动态内存分配失败!\n");
exit(-1);//终止整个程序
}
else
{
printf("动态内存分配成功!\n");
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("数组为空!\n");
}
else
{
for(int i=0;icnt;i++)//for的作用是把数组中的所以数都输出
printf("%d ",pArr->pBase[i]);//%d后面有空格,在输出上好区分数字
printf("\n");
}
}
//追加函数*****************************************************************************************************************************************************************************************
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;icnt;++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
{
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;icnt;++i)
{
for(j=i+1;jcnt;++j)
{
if(pArr->pBase[i]>pArr->pBase[j])
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
}
}
}
}
//**************************************************************************************************************************************************************************************************
这个代码里面已经涉及了一些排序啊,倒序之类的,。