Я пытаюсь написать код для связанных списков в C - PullRequest
1 голос
/ 05 марта 2020

Я должен написать код для лаборатории, и я не понимаю, как я могу вставить узлы с какой функцией.

struct list {int value; struct list * next;};

int main () ........ код говорит, что мы спрашиваем пользователя, сколько целых чисел (N) он хочет вставить в список ... так легко printf, scanf И ТОГДА. Он запросит номера и перечислит их в порядке их поступления. Я думаю, что мне нужен цикл for, но я знаю много функций для вставки, например, insertAfter, pu sh et c и т. Д. Мне нужна ваша помощь! Спасибо

1 Ответ

0 голосов
/ 05 марта 2020

Структура, которую вы дали, представляет собой узел . Сначала вы создаете заголовок списка, затем вам нужно прочитать числа по одному, создать узел для каждого номера и добавить его в конец списка, используя функцию append(), определенную в указанном коде. ниже.

Вот полная необходимая вам программа (коды функций взяты с geeksforgeeks.org):

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

// A linked list node 
struct Node 
{ 
  int data; 
  struct Node *next; 
}; 

/* Given a reference (pointer to pointer) to the head 
   of a list and an int, appends a new node at the end  */
void append(struct Node** head_ref, int new_data) 
{ 
    /* 1. allocate node */
    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); 

    struct Node *last = *head_ref;  /* used in step 5*/

    /* 2. put in the data  */
    new_node->data  = new_data; 

    /* 3. This new node is going to be the last node, so make next of 
          it as NULL*/
    new_node->next = NULL; 

    /* 4. If the Linked List is empty, then make the new node as head */
    if (*head_ref == NULL) 
    { 
       *head_ref = new_node; 
       return; 
    } 

    /* 5. Else traverse till the last node */
    while (last->next != NULL) 
        last = last->next; 

    /* 6. Change the next of last node */
    last->next = new_node; 
    return; 
} 


// This function prints contents of linked list starting from head 
void printList(struct Node *node) 
{ 
  while (node != NULL) 
  { 
     printf(" %d ", node->data); 
     node = node->next; 
  } 
} 


int main() 
{ 
  /* Start with the empty list */
  struct Node* head = NULL; 

  int n;
  scanf("%d", &n);

  for(int i=0; i<n; i++) {
    int e;
    scanf("%d", &e);
    append(&head, e);
  }

  printList(head);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...