各位大哥请帮帮忙啊!

vood 2003-08-30 03:00:12
小弟近日看到一个关于数组的问题,是在是不明白
请各位大哥指点以下啊!!

题目是:设有n行n列两维数组,因其下三角元素全为零,不再存储其下三角的零元素,只将其上三角的元素按行优先存储于一维数组中。编制一个函数,要求函数在不引入工作数组情况下,将按行优先存储的上三角元素改为按列优先存储。
设 n=5,下三角元素全为0的两维数组a为

inta[][5]={{1,2,3,4,5},
{0,6,7,8,9},
{0,0,10,11,12},
{0,0,0,13,14},
{0,0,0,0,15}};

不存储它的下三角0元素,按行优先存储于一维数组b中,b为
int b[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
函数在不使用工作数组情况下,讲使b的值成为:
{1,2,6,3,7,10,4,8,11,13,5,9,12,14,15}

书上说,函数是对数组元素的存储位置作调整,全部调整元素存在若干循环传送链。

但是,我还是很不理解。到底循环传送链是怎么实现的呢?
呵呵,其实是程序员教程上面的例题,不要见笑啊,呵呵
...全文
79 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


哦~原来如彼~~

Dragon132 2003-08-30
  • 打赏
  • 举报
回复

应该确定如果 数组b[m]与a[i][j]对应
对于行优先m=(2*n-1-i)*i/2+j = i*n+j-i(1+i)/2
对于列优先m=(j+1)*j/2+i = i+1+2+…+j;
循环传送链其实是一个调整的过程在本例中b[2]->b[3]指将b[2]元素放到b[3]元素中
则k=2时存在这样一个调整b[2]->b[3]->b[6]->b[4]->b[10]->b[8]->b[11]->b[12]->b[10]->b[5]->b[2]在这里2小于任何一个下标直到2则所有这些元素没有调整过
而k=3时应为b[3]->b[6]->b[4]->b[10]->b[8]->b[11]->b[12]->b[10]->b[5]->b[2] 这里2小于3说明b[3]在k=2时调整过所以不再调整
vood 2003-08-30
  • 打赏
  • 举报
回复
啊!我以为只有我一个人不知道工作数组,原来~~~

恩,应该是先从数组a中提取出以行优先方式存储的数组b,再转化为列优先数组的。
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


不太明白~
1.什么叫工作数组?是中间变量?
2.这个函数是直接从数组a中提取出以列优先方式存储的数组b,
还是将已经是行优先存储的数组b转换成列优先存储?

Wanix 2003-08-30
  • 打赏
  • 举报
回复
记得教材中有详细的解释,好好看几边教材吧!
ejiue 2003-08-30
  • 打赏
  • 举报
回复
请问.............这道题目是什么意思?!
我怎么看不懂。
vood 2003-08-30
  • 打赏
  • 举报
回复
恩,关键是我真的没有搞清楚
书上写的我看到云雾里面去了
那位能不能详细讲一讲啊
谢谢拉!
Wincent 2003-08-30
  • 打赏
  • 举报
回复
是对数组元素的指针进行运算,通过指针的变化完成的,
关键是把指针变化弄清。
kashima 2003-08-30
  • 打赏
  • 举报
回复
没见笑,程序员教程确实烂啊~~~
Dragon132 2003-08-30
  • 打赏
  • 举报
回复
mark

69,336

社区成员

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

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