C语言中如何实现一个排列,但是需要排列的个数是不确定的,也就是说输进去多少就排多少

如题,请高手赐教啊!!!!!

这个很好实现,你可以使用malloc函数进行内存申请,给你举个例子吧,哈哈,
例如需要5个int型的数排列,你就可以这样定义
int* a=(int)malloc(sizeof(int)*5);
这样就申请了5个int型的内存单元,而且使用起来很灵活方便。直接可以按照数组的操作方式来操作,例如你可以直接这样做, a[0]=100;a[1]=200;也可以进行数组操作。不过这个需要实现由用户输入要排序元素的个数。在这个基础上进行改进就可实现你要的。如下。
首先和上边一样,当用户每输入一个,你就用malloc申请一个int单元。当用户输入第二个时你可以使用realloc函数,这个函数是在malloc的内存上追加内存单元,使用如下;
int* a=(int)malloc(sizeof(int)*1);
int* a=(int*)realloc(a,sizeof(int)*1);追加一个
这样就可以了,使用还是一样,可以使用数组方式和指针方式。哈哈,给分吧。!!~~应该会帮到你。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-30
排列前获取需要排列元素个数 然后根据个数建立一个数组 再逐步将元素放进数组指定位置中 比如说排列数字 从小到大 数组当前状态是 3 7 9 _ _ _ ‘_’代表还没赋值的 需要插入数 6 先找到位置 3 7之间 然后从后面开始将7 9依次移动一位 再将6放入原来7的地方 数组就变成了3 6 7 9 _ _ 如果排列前不能确定元素个数时候 则需要定义一个初始大小 和 一个递增大小 初始大小是一开始数组大小 递增大小是数组不够用了 对数组进行扩充增加的大小
第2个回答  2010-06-30
上面那个回答思想是不错的。但是对C语言里面数组的使用理解的还不够到位。
在C语言里面,数组大小在编译期就要被确定。所以你说获取排列元素个数然后建立数组的思想是不正确的。
但是你的数组扩充思想是正确的。对于这个问题,可以在读取元素的时候动态改变数组的大小。也就是说在数组不够用的时候再定义一个更大的数组,将原有数组里元素复制到新数组中。
或者用动态内存分配,先malloc分配一定量内存,不够用的话在动态用realloc函数,比较方便一点。需要说明的是,realloc函数制定的第二个参数是需要的新的内存大小,并不是你需要增加的大小。
最后用排序方法对数组进行排序就行了,例如最简单的冒泡排序。
第3个回答  2010-06-30
用while循环先判断输入个数就行了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网