gpt4 book ai didi

c - 如何在链表中插入多条数据

转载 作者:行者123 更新时间:2023-11-30 21:06:15 24 4
gpt4 key购买 nike

该程序要求两个数据(名称和 ID),然后将它们存储在一个链接列表中,然后它应该一一输出所有数据。

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


struct Test
{
char name[16];
int id;
};

typedef struct Node {
struct Test structure;
struct Node * next;

}TNode;
typedef TNodo* Node;

void NewDatainNode(struct Test p, Node *pp)
{
TNode *temp;

temp = malloc(sizeof(struct Node));

temp->structure = p;
temp->next = NULL;

*pp = temp;

}

void ReadData(struct Test * p)
{
printf("\nName:");
scanf(" %s", p->name);
printf("\nID:");
scanf(" %d", &p->id);
}


void ViewNodes(Node node)
{
while(node != NULL)
{
printf("%s %d\n",node->structure.name, node->structure.id);
node = node->next;
}

}

int Menu()
{
int c;

printf("\n\tM E N U ***\n"
"1 - New\n"
"2 - Print\n"
"0 - Exit\n"
"\n>> ");
scanf(" %d", &c);

return c;
}



int main()
{
int c;
struct Prova test;
struct Node * list = NULL;
do {
c = Menu();

switch (c)
{
case 1: ReadData(&test);
NewDatainNode(test, &list);break;
case 2: ViewNodes(lista); break;
default: c = 0;
}

} while (c != 0);

return 0;
}

问题是它只输出最后插入的数据,我该怎么做才能让它输出函数 NuovaPrenotazione() 中检索到的所有数据?

更新:现在函数 NewDatainNodes() 看起来像这样:

void NewDatainNode(struct Test  p, Node *pp)
{
TNode *temp;

temp = malloc(sizeof(struct Node));

temp->structure = p;
temp->next = *pp;

*pp = temp;

}

感谢Sandeep的修正,即使没有返回值,该函数也能工作,问题是temp->struct = NULL

最佳答案

此问题与昨天发布并标记为重复的问题完全相同。但是,这是您的工作代码:

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

struct Prova
{
char nome[16];
int id;
};

typedef struct Node {
struct Prova struttura;
struct Node * next;

}TNodo;
typedef TNodo* Nodo;

Nodo NuovaPrenotazione(struct Prova p, Nodo pp)
{
Nodo temp;

temp = (Nodo)malloc(sizeof(struct Node));

temp->struttura = p;
temp->next = pp;

pp = temp;
return pp;
}

void LeggiPrenotazione(struct Prova * p)
{
printf("\nNome Cliente:");
scanf(" %s", p->nome);
printf("\nID:");
scanf(" %d", &p->id);
}

void Visualizza(struct Prova p)
{
printf("%s %d\n", p.nome, p.id);

}

void VisualizzaPrenotazione(Nodo nodo)
{
while(nodo != NULL)
{
Visualizza(nodo->struttura);
nodo = nodo->next;
}

}

int Menu()
{
int scelta;

printf("*** M E N U ***\n"
"1 - New\n"
"2 - Print\n"
"0 - Esci\n"
"Scelta --> ");
scanf(" %d", &scelta);

return scelta;
}



int main()
{
int scelta;
struct Prova test;
Nodo lista = NULL;
do {
scelta = Menu();

switch (scelta)
{
case 1: LeggiPrenotazione(&test);
lista = NuovaPrenotazione(test, lista);
break;
case 2: VisualizzaPrenotazione(lista); break;
default: scelta = 0;
}

} while (scelta != 0);

return 0;
}

更新:这是输出

enter image description here

关于c - 如何在链表中插入多条数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com