请问如果在程序运行前不知道所需数组的数量怎么办啊?

kingdom001 2011-07-27 12:05:37
如题,请注意,是不知道所需数组的数量,而不是可变长数组!
具体问题如下,我需要通过读取文件来确定单行树的数量,每棵单行树我现在都用一个结构体数组来表示。请问用纯c如何实现啊?相应的截取的matlab代码如下:

ST_NUM=1;%单行树数量
recordnumber=1;
queuelength=12;%等待队列的长度
ST1=[1,2;2,5;3,7];
ST2=[1,3;2,6;4,9;8,15;7,19;4,26];
ST={ST1,ST2};

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%produce the utilization for each task in ST1 and ST2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:ST_NUM
[l,r]=size(ST{j});%l矩阵行数,r矩阵列数
for i=1:l
ST{j}(i,3)=ST{j}(i,1)/ST{j}(i,2);
end;
end;
...全文
320 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
majia2011 2011-07-28
  • 打赏
  • 举报
回复
你理解的不对,hash是为了遍历效率,array是为了定位,list用于动态增长

array[st1.hash] = st1;

if (st1.hash == st2.hash)
{
if (str2.pri>st1.pri)
{
array[st2.hash]=st2;
array[st2.hash].list=st1;
}
}
liufang421 2011-07-28
  • 打赏
  • 举报
回复
n个数组
p = malloc(n*4);

((int*)p)[0] = malloc(len0);
((int*)p)[1] = malloc(len1);
.....
((int*)p)[n] = malloc(lenn);

kingdom001 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 kingdom001 的回复:]
引用 21 楼 majia2011 的回复:
不可能不行,linux和nt核心代码里面都有用到

你要是有更好的方法,就发出来让咱学习下,呵呵呵

感觉好像可以用,你的意思是不是就是造一个固定大小的数组,然后每个元素都指向一个链表?即我所说的一个st树?感觉这方法在st不多的情况下倒是可以。另外,你是说linux下就是这么实现这个问题的吗?
[/Quote]
是这个意思吗?我觉得应该可以用,不过也不完美,可能c语言也只能到这样了吧。
kingdom001 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 majia2011 的回复:]
没做出来?
[/Quote]
不是,还没做。你看下,我上面说的是你想表达的意思吗?确认一下。
majia2011 2011-07-28
  • 打赏
  • 举报
回复
没做出来?
kingdom001 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhao4zhong1 的回复:]
仅供参考

C/C++ code
//使用动态分配
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int i,L;
char *p;
void main() {
for (i=0;i<20000;i++) {
L=rand();
p=malloc(L);
……
[/Quote]
谢谢,不过貌似您还没懂我的意思。。。⊙﹏⊙b汗
赵4老师 2011-07-28
  • 打赏
  • 举报
回复
仅供参考
//使用动态分配
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int i,L;
char *p;
void main() {
for (i=0;i<20000;i++) {
L=rand();
p=malloc(L);
if (NULL==p) {
printf("malloc error!\n");
continue;
}
memset(p,0,L);
free(p);
}
}
//不使用动态分配
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAXLEN 30000
int i,L;
char buf[MAXLEN];
char *p;
void main() {
p=&buf[0];
for (i=0;i<20000;i++) {
L=rand();
if (L>MAXLEN) {
printf("L>MAXLEN==%d, ignore spilth.\n",MAXLEN);
L=MAXLEN;
}
memset(p,0,L);
}
}
kingdom001 2011-07-28
  • 打赏
  • 举报
回复
24#有什么好的建议吗?
kingdom001 2011-07-28
  • 打赏
  • 举报
回复
承蒙赐教!
xiaohuh421 2011-07-28
  • 打赏
  • 举报
回复
4楼的大大都对你这个问题无语了,
编程确实要懂得变通,数组这个方向不能搞定,自然要去寻找其它方法了
我的一般思想是先解决问题,再优化
kingdom001 2011-07-28
  • 打赏
  • 举报
回复
还有人吗?
kingdom001 2011-07-27
  • 打赏
  • 举报
回复
问题是,malloc也只能针对一个数组吧?如果提前不知道数组数量呢?而且创建数组或指针,至少需要数组或指针名吧?这个貌似不能动态生成吧?
pathuang68 2011-07-27
  • 打赏
  • 举报
回复
动态分配内存malloc也不行么?
赵4老师 2011-07-27
  • 打赏
  • 举报
回复
谁知道找谁问。(^_^)
kingdom001 2011-07-27
  • 打赏
  • 举报
回复
而且matlab的代码跟最后需要的效果是不一样的,matlab中直接写死了数据,但实际是需要动态的。
kingdom001 2011-07-27
  • 打赏
  • 举报
回复
老兄,我说了是纯c啊
Michael_Xie 2011-07-27
  • 打赏
  • 举报
回复
用list,vector之类的容器啊
kingdom001 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 majia2011 的回复:]
不可能不行,linux和nt核心代码里面都有用到

你要是有更好的方法,就发出来让咱学习下,呵呵呵
[/Quote]
感觉好像可以用,你的意思是不是就是造一个固定大小的数组,然后每个元素都指向一个链表?即我所说的一个st树?感觉这方法在st不多的情况下倒是可以。另外,你是说linux下就是这么实现这个问题的吗?
majia2011 2011-07-27
  • 打赏
  • 举报
回复
不可能不行,linux和nt核心代码里面都有用到

你要是有更好的方法,就发出来让咱学习下,呵呵呵
kingdom001 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 majia2011 的回复:]
其实我写这么多,都多于

就是hash数组,自己上网找去吧
[/Quote]
好的,我找找看,不过感觉不太行啊。。。
加载更多回复(13)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧