使用带有C的结构的自定义订单

时间:2018-09-17 05:30:53

标签: c arrays

我试图以之字形结构指定的顺序调用数组。任何帮助和见解对此表示极大的赞赏。我已经尝试了几件事,所以我认为我可以有所帮助。该项目很少。我无法想象该怎么做。我最后试图调用该结构并使用它,但是它从未以我需要阅读的模式被拾取。

我试图按结构中坐标的顺序打印出。我得到的当前输出是数组值的标准顺序。 10、4、2等。我按标准顺序获得了每个数字的全部1或2。
如何获取要按结构中数组位置顺序打印的数组值?

#include <stdio.h>
#include <stdlib.h>

#define N 8

typedef struct _Matrix{
    double element [N][N];
} Matrix;

struct zigzag {
    int row, col;
} ZigZag[N*N] = {
    {0,0},
    {0,1},{1,0},
    {2,0},{1,1},{0,2},
    {0,3},{1,2},{2,1},{3,0},
    {4,0},{3,1},{2,2},{1,3},{0,4},
    {0,5},{1,4},{2,3},{3,2},{4,1},{5,0},
    {6,0},{5,1},{4,2},{3,3},{2,4},{1,5},{0,6},
    {0,7},{1,6},{2,5},{3,4},{4,3},{5,2},{6,1},{7,0},
    {7,1},{6,2},{5,3},{4,4},{4,5},{2,6},{1,7},
    {2,7},{3,6},{4,5},{5,4},{6,3},{7,2},
    {7,3},{6,4},{5,5},{4,6},{3,7},
    {4,7},{5,6},{6,5},{7,4},
    {7,5},{6,6},{5,7},
    {6,7},{7,6},
    {7,7}
};

int data[N*N];

int* ZigZagOrdering(Matrix x) // fill data and return data
{
    int i;
    int j;
    struct zigzag zigzag;
    int k;

    for(i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
        {
            for (k=0; k<N; k++)
            {
                 printf ("%g ",x.element[i][j]);
             }
             printf ("%d " , zigzag.row[k]);
        }// innerfor
        printf("\n");
    }//outer for
}//ZZ 



int main(int argc, char **argv)
{
    // special case that allows us to initialize this way
    Matrix C =    {10,  4, 2,  5, 1, 0, 0, 0,
                    3,  9, 1,  2, 1, 0, 0, 0,
                   -7, -5, 1, -2, -1, 0, 0, 0,
                   -3, -5, 0, -1, 0, 0, 0, 0,
                   -2,  1, 0,  0, 0, 0, 0, 0,
                    0,  0, 0,  0, 0, 0, 0, 0,
                    0,  0, 0,  0, 0, 0, 0, 0,
                    0,  0, 0,  0, 0, 0, 0, 0};

    // encoding
    // EncodeRunlength("output.dat", C);
    //decoding
    // DecodeRunlength("output.dat");
    ZigZagOrdering(C);
}//main

1 个答案:

答案 0 :(得分:0)

我认为您只是应该按照Matrix x定义的顺序遍历ZigZag。因此,您的代码变得相当简单。我不知道您的实际功能应该返回什么,因此我将其更改为不返回任何内容。

void ZigZagOrdering(Matrix x)
{
    // iterate through every item in ZigZag array
    for(int i=0; i < N*N; i++)
    {
        // temp variables to make code easier to read and less repetitive
        int row =  ZigZag[i].row;
        int col = ZigZag[i].col;
        // print row and column from ZigZag, and value in x at that position
        print("row %d column %d value %g\n", row, col, x[row][col]);
    }
}

我希望该功能使您了解需要什么,以便您可以编写实际功能。如果对 this 尚不清楚,请在注释中提问,但是如果您需要询问有关如何返回值等的其他问题,请首先处理代码,然后使用新的问题提出新的问题。显示新问题的代码。