c语言 java append_java中的ArrayList 的C语言实现版本。

论代码注释的重要性,

有时可能有些代码自己真的以后都用不上了,但是当有一天你回头看到之前写的代码也是一种让人回忆的东西

下面时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;

}

}

}

}

//**************************************************************************************************************************************************************************************************

这个代码里面已经涉及了一些排序啊,倒序之类的,。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值