如何在链表中插入多个数据

时间:2018-04-25 14:04:26

标签: c

该程序要求两个数据(名称和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->structure = NULL

1 个答案:

答案 0 :(得分:0)

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

 #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