无法将数组值排入队列

时间:2013-08-13 08:27:37

标签: c queue

我创建了一个包含二维数组的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]);    
    }   
}

3 个答案:

答案 0 :(得分:0)

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

typedef struct Queue {
   int *data[2];

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

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内存然后在完成后释放它就会更复杂一些。

答案 1 :(得分:0)

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

不,你只需在int *data[2];

中创建onw维度中的指针数组

如果要创建包含两个版本阵列的Quene,it will be int data[size][size_anoter]

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

int * data[size];

此外,最好将size定义为SIZE

答案 2 :(得分: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;
}