将二维数组转换为一维数组(有条件)

时间:2012-02-24 16:39:35

标签: c

我有一个二维(3x7)数组,我想转换成一维数组,这样我提供的行就在中心。行值可能会有所不同,但必须位于中心位置。

#define numRows 3
#define numCols 7
#define TotalNum 21

int arr[numRows-1][numCols-1] =
                    { {0,1,2,3,4,5,6}, {7,8,9,10,11,12,13}, {14,15,16,17,18,19,20} };
int stack[TotalNum-1];

stackup(arr,stack,row);

void stackup(int *p,int *s,int &row1)
{     
    int k =0;  
    for(int i = 0; i<numRows; i++) 
    {         
        for(int j = 0; j<numCols; j++)
        {           
            s[k] = p[i][j];
            k++;
        }              
    } 
}

函数stackup肯定是错误的,需要进行调整,但我不知道如何调整它,以便在推入堆栈时提供的行位于中心。

1 个答案:

答案 0 :(得分:1)

#define numRows 3
#define numCols 7
#define TotalNum (numRows*numCols)

void stackup(int **p,int *s,int row1)
{     
    int k = 0,t;
    int middle = (numRows-1)/2;
    for (int i = 0; i<numRows; i++) {
        t=i;
        if (i==middle || i==row1)
            i = (i==row1)?middle:row1;
        for (int j = 0; j<numCols; j++)
            s[k++] = p[i][j];
        i=t;
    }
}

基本上将“p”中的所有元素逐行添加到“s”中。当中间行的时间时,将添加row1中的元素。当添加row1的元素时,会添加中间行的元素。