我有这个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");
}
答案 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;
}
}