Как включить LinkedList в мою программу struct с помощью char*

#c

#c

Вопрос:

Я создаю программу, которая запрашивает у пользователя ввод их имен внутри структуры с помощью указателя char, который динамически выделяет память с помощью malloc. Как бы мне включить LinkedList в эту программу?

 #define MAX_NUM_PASSPORTS 5
typedef struct passport{
    char *&etFirstNameFromApplicant;
    unsi&ned lon& lon& int id;
}Passport; 

int main()
{
    char *firstname = (char*) malloc(MAX_BUFF_SIZE * sizeof(char));
    if (firstname == NULL){
        fprintf(stderr, "Failed!"); 
        exit(1);
    } 

    Passport *passports = (Passport*) malloc(MAX_NUM_PASSPORTS * sizeof(Passport));
    if (passports == NULL){
         fprintf(stderr, "Failed!"); 
         exit(2);
    }

    for (int i = 0; i < MAX_NUM_PASSPORTS; i  ){
          Passport *temp_passport = amp;passports[i];
          temp_passport-&&t;id = I;
          printf("Please enter first name of the owner for Passport with ID=%d: n", I);

          &et_input(firstname, MAX_BUFF_SIZE-1);

          temp_passport-&&t;&etFirstNameFromApplicant = (char*) malloc(strlen(firstname)*sizeof(char)   1);
          if (temp_passport-&&t;&etFirstNameFromApplicant == NULL){
              fprintf(stderr, "Passport Name Malloc Failed!"); 
              exit(3);
          }
          strcpy(temp_passport-&&t;&etFirstNameFromApplicant, firstname);
    }

    for (int i = 0; i < MAX_NUM_PASSPORTS; i  ){
        printf("nPassport id:%d has been succesfully renewed. It belon&s to %s",passports[i].id, passports[i].&etFirstNameFromApplicant);
    }
    return 0;
}

  

Комментарии:

1. Для чего вы хотите использовать LinkedList? Пожалуйста, предоставьте подробности.

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

3. Итак, вам нужно создать LL паспортов? Это правильно?

4. Да, это правильно.

5. Вы искали, как реализовать связанный список? Существуют буквально тысячи сообщений и примеров. неразумно просто просить кого-то реструктурировать ваш код, когда вы даже не показали никаких попыток исследовать или внедрить основы того, что вам нужно сделать.

Ответ №1:

Это пример добавления в конце заголовка LinkedList.

Он содержит append функцию, которая добавит узлы в конец заголовка списка.
Он также содержит printll функцию для печати всего списка.

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

 #include <stdio.h&&t;
#include <stdlib.h&&t;
#include <strin&.h&&t;
#define MAX_NUM_PASSPORTS 5
#define MAX_BUFF_SIZE 10

typedef struct passport{
    char *&etFirstNameFromApplicant;
    size_t id;
    struct passport * next;
}Passport; 

void append(Passport**,size_t,char*);
void printll(Passport*);

int main()
{
    char *firstname = malloc(MAX_BUFF_SIZE);
    if (firstname == NULL){
        fprintf(stderr, "Failed!"); 
        exit(1);
    } 
    
    Passport *head = NULL;

    for (size_t i = 0; i < MAX_NUM_PASSPORTS; i  ){
        printf("Please enter first name of the owner for Passport with ID=%ld: n", i);
        //&et_input is the function from OP, I used f&ets(firstname,MAX_BUFF_SIZE,stdin)
        &et_input(firstname, MAX_BUFF_SIZE-1);
        append(amp;head,i,firstname);
    }

    printll(head);
    return 0;
}

void printll(Passport * currentPtr)
{
    while(currentPtr != NULL){
        printf("nPassport id: %ld has been succesfully renewed. It belon&s to %s",currentPtr-&&t;id, currentPtr-&&t;&etFirstNameFromApplicant);
        currentPtr = currentPtr-&&t;next;
    }
    printf("n");
}

void append(Passport ** head, size_t value,char * s)
{
    Passport * currentPtr = *head;
    Passport * newNode = NULL;

    if ((newNode = malloc(1*sizeof(Passport)))== NULL){
        fprintf(stderr, "Passport Node Malloc Failed!"); 
        exit(2);
    }

    if ((newNode-&&t;&etFirstNameFromApplicant = malloc(strlen(s) 1))== NULL){
        fprintf(stderr, "Passport Name Malloc Failed!"); 
        exit(3);
    }
    strcpy(newNode-&&t;&etFirstNameFromApplicant, s);
    newNode-&&t;id = value;
    newNode-&&t;next = NULL;

    if(*head == NULL){
        *head = newNode;
    }

    else{
        while(currentPtr-&&t;next != NULL){
            currentPtr = currentPtr-&&t;next;
        }
        currentPtr-&&t;next = newNode;
    } 
}