0

我创建了一个Queue包含二维数组的数组,该数组的每个元素的大小为 2。当我将一个 2 大小的数组排入队列时发生异常。

以下是我的代码:

#include "stdio.h"

#define size 1000

typedef struct Queue {
    int *data[2];
    int front;
    int rear;
}Queue;

void init(Queue *q)
{
    q->front=0;
    q->rear=0;
}

void Enqueue(Queue *q,int *value)
{
    if(q->rear==size)
        return ;

    q->data[q->rear++]=value;
}

void main()
{
    Queue q[1];

    init(q);

    int a[10][2];

    for(int i=0;i<10;i++) {
        a[i][0]=i;
        a[i][1]=i*2+1;      
        Enqueue(q,a[i]);    
    }   
}
4

3 回答 3

0
 *I create a Queue that includes a two dimensional array*

不,您只需在 onw 维中创建一个指针数组int *data[2];

如果你想创建一个包含两个维度数组的 Quene,it will be int data[size][size_anoter]

但是,您不需要 I 二维 。在void Enqueue(Queue *q,int *value)function 中,您将地址从 a[i] 传递给 data[i] 。所以你只需要一个足够大的指针数组;\

int * data[size];

此外,最好能定义sizeSIZE

于 2013-08-13T09:18:47.420 回答
0

大概,感觉如下

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

#define size 1000

typedef struct Queue {
    int (**data)[2];
    int front;
    int rear;
} Queue;

void init(Queue *q){
    q->front=0;
    q->rear=0;
    q->data = malloc(size*sizeof(int (*)[2]));
}

void Enqueue(Queue *q,int (*value)[2]){
    if(q->rear==size)
        return ;

    q->data[q->rear++]=value;
}

int main(){
    Queue q[1];

    init(q);

    int a[10][2];

    for(int i=0;i<10;i++) {
        a[i][0]=i;
        a[i][1]=i*2+1;
        Enqueue(q, &a[i]);
    }
    //printf("%d\n", (*q->data[0])[1]);
    return 0;
}
于 2013-08-13T09:22:57.387 回答
0

我至少可以看到几个问题:

typedef struct Queue {
   int *data[2];

这不是指向二维整数数组的指针,我认为这是预期的。它是一个由两个 int 指针组成的数组。对于包含 1000 个包含两个元素的数组条目的二维数组,您可能需要:

typedef struct Queue {
   int data[size][2];

然后,当您调用 Enqueue() 时,将两个整数的数组复制到由后面指示的相应条目中:

void Enqueue(Queue *q,int value[2])
{
    if(q->rear==size)
        return ;

    memcpy(q->data[q->rear], value, sizeof(q->data[q->rear]));
    q->rear++;
}

此解决方案将制作一个固定数组。如果您希望动态构建数组,它会稍微复杂一些,因为您需要 malloc/calloc 内存,然后在完成后释放它。

于 2013-08-13T09:05:52.163 回答