队列无法提取

时间:2014-06-06 20:20:36

标签: c pointers queue adt

我有这个C代码。我制作了一个模拟队列的结构(后面插入和前面的摘录)。插入似乎有效,但是当我想用这段代码删除节点时,没有任何反应。

nodo* dequeue(nodo* head) {
    if(head==NULL) {
        return NULL; //nothing to extract
    }
    else {
        nodo* temp=malloc(sizeof(nodo *));
        temp=head;
        head=head->next;
        return temp;
    }
}

这是结构:

typedef struct coda{
 int x;
 char *y;
 char *t;
 int z;
 struct coda *next;
}nodo;

这是主要的

#include "list.h"

int main(void){
    nodo * testa;
    char* hi="hi";
    char* bye="bye";

    testa=enqueue(15,hi,bye,1,NULL);
    enqueue(16,hi,bye,1,testa);
    enqueue(17,hi,bye,1,testa);
    enqueue(18,hi,bye,1,testa);
    printList(testa);
    nodo *newHead = dequeue(&testa);
    printList(testa);
}

以及代码的其余部分

nodo* enqueue(int codArt,char *descrArt,char *indDest,int status,struct coda* head){

    if(head==NULL){
        nodo *nuovo_nodo=malloc(sizeof(nodo));
        nuovo_nodo->x=codArt;
        nuovo_nodo->y=descrArt;
        nuovo_nodo->t=indDest;
        nuovo_nodo->z=status;
        nuovo_nodo->next=NULL;
        return nuovo_nodo;
    }else if(head->next!=NULL)
        enqueue(codArt,descrArt,indDest,status,head->next);
    else
        head->next=enqueue(codArt,descrArt,indDest,status,head->next);

}

void printList(struct coda* head){
    struct coda* thead=head;
    while(thead!=NULL){

        printf("--> %d ",thead->codiceArticolo);
        thead=thead->next;
    }
    printf("\n");

}

1 个答案:

答案 0 :(得分:0)

您提供的代码似乎与您的要求相反:

main中,您有dequeue的电话:

nodo *newHead = dequeue(&testa);

你的意思是回到旧脑袋吗?

您的dequeue函数会指向头部。它应该是指向指针的指针。

您好像在dequeue分配内存。我现在看到在enqueue中完成了分配,这是它应该发生的地方。 (顺便说一下,你认为你什么时候应该释放记忆?)

所以,我认为出队应该更像是这样:

nodo* dequeue(nodo** head) {
    if(head==NULL) {
        return NULL; //nothing to extract
    }
    else {
        nodo* temp=*head;
        *head=temp->next;
        return temp;
    }
}