有没有朋友见过这样的描述矩阵数据结构(数组地不要)

夏虫…… 2008-09-19 08:48:36
一个矩阵结构,比如下图中的3*3的矩阵。建立好以后可以实现上下左右四个方向移动。
我的目的是用于显示数据包的更新。数据包中的内容是以方块来存放的。显示的时候判断要显示
哪几个方块。然后显示出来。更新的时候决定哪几个数据块需要从文件中读入。
用这样的矩阵就可以判断。我自己写了一个效果不是很好。不知道有没有数据结构高人已经实现的。

用数组的话每次左移或右移只能在代码中写死了。比如a[1] = a[5]。。。
当改变矩阵大小时,比如从3*3变为4*4时就要变动代码。所以我没用。

矩阵右移一个步长 可以看出左边一列数据需要更新
_______ _______
|1|2|3| |0|1|2|
|4|5|6|->|0|4|5|
|7|8|9| |0|7|8|
------- -------
矩阵右移两个步长 可以看出左边两列数据需要更新
_______ _______
|1|2|3| |0|0|1|
|4|5|6|->|0|0|4|
|7|8|9| |0|0|7|
------- -------
矩阵上移一个步长 可以看出下面一列数据需要更新
_______ _______
|1|2|3| |4|5|6|
|4|5|6|->|7|8|9|
|7|8|9| |0|0|0|
------- -------
分不多。大家不要见怪。
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏虫…… 2008-09-22
  • 打赏
  • 举报
回复
是的。貌似这是最好的解决办法。谢谢楼上两位。分不多。意思意思。
binsir543 2008-09-19
  • 打赏
  • 举报
回复
说实话没怎么看懂,你是要实现任意大小的矩阵吗?
#define N 4
int** a;
a=(int*)malloc(N*sizeof(int*));
for (int i=0;i<N;i++)
a[i]=(int)malloc(N*sizeof(int));

然后你是要整行或者整列的移动?
oo_v_oo 2008-09-19
  • 打赏
  • 举报
回复
楼主注意信誉
该给分就给吧,别犹豫
oo_v_oo 2008-09-19
  • 打赏
  • 举报
回复
这个简单

// array为数组,共有n*n个元素,n为数组行数,type为移动类型
void MoveMatrix(int * array, int n, int type) {
int * pBuffer;
int i;
pBuffer = new int[n];
switch(type) {
case 0: //左移一单元
for(i=0;i<n;i++) {
memcpy(pBuffer,&array[i*n+1],sizeof(int) * (n-1));
memcpy(&array[i*n],pBuffer,sizeof(int) * (n-1));
array[i*n+n-1] = 0;
}
break;
case 1: //右移一单元
for(i=0;i<n;i++) {
memcpy(pBuffer,&array[i*n],sizeof(int) * (n-1));
memcpy(&array[i*n+1],pBuffer,sizeof(int) * (n-1));
array[i*n] = 0;
}
break;
case 2: //上移一单元
for(i=1;i<n;i++) {
memcpy(pBuffer,&array[i*n],sizeof(int) * n);
memcpy(&array[(i-1)*n],pBuffer,sizeof(int) * n);
}
memset(&array[(n-1)*n],0,sizeof(int) * n);
break;
case 3: //下移一单元
for(i=n-2;i>=0;i--) {
memcpy(pBuffer,&array[i*n],sizeof(int) * n);
memcpy(&array[(i+1)*n],pBuffer,sizeof(int) * n);
}
memset(&array[0],0,sizeof(int) * n);
break;
default:
printf("LZ不按套路出牌\n");
}
delete[] pBuffer;
}
binsir543 2008-09-19
  • 打赏
  • 举报
回复
晕,我这个不能动态调整我贴他干吗
你可以这样写啊
int **creatematrix(int n)
{
int** a;
a=(int*)malloc(n*sizeof(int*));
for (int i=0;i <n;i++)
a[i]=(int)malloc(N*sizeof(int));
return a;
}
void deletematrix(int **a,n)
{
for(int i=0;i<n;i++)
delete[] a[i];
delete[] a;
}
你想要4*4的数组就int **matrix=creatematrix(4);
不要了就deletematrix(4);
夏虫…… 2008-09-19
  • 打赏
  • 举报
回复
对啊。任意大小的矩阵。你定义的那个是4.也不能动态调整了。
我想能动态调整的。建立,移动。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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