【问题标题】:How to include a LinkedList to my struct program with char*如何使用 char* 将 LinkedList 包含到我的结构程序中
【发布时间】:2020-11-28 21:09:09
【问题描述】:

我正在创建一个程序,该程序要求用户在一个结构中输入他们的名字,该结构带有一个使用 malloc 动态分配内存的 char 指针。我如何将 LinkedList 包含到这个程序中?

#define MAX_NUM_PASSPORTS 5
typedef struct passport{
    char *getFirstNameFromApplicant;
    unsigned long long 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 = &passports[i];
          temp_passport->id = I;
          printf("Please enter first name of the owner for Passport with ID=%d: \n", I);

          get_input(firstname, MAX_BUFF_SIZE-1);

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

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

【问题讨论】:

  • 你想用LinkedList做什么?请提供详细信息。
  • 嗨,这是我的作业。我知道 LinkedList 的功能,并且能够使用静态名称数组对其进行编程,但我不知道如何将其动态编程到该程序中。
  • 那么,您需要创建护照的 LL 吗?对吗?
  • 是的,没错。
  • 你有没有搜索过如何实现链表?实际上有成千上万的帖子和示例。当你甚至没有表现出任何研究或实现你需要做的基础的尝试时,仅仅要求某人重新构建你的代码是不合理的。

标签: c


【解决方案1】:

这是一个在 LinkedList 头部末尾追加的示例。

它包含一个append 函数,它将节点添加到列表头部的末尾。
它还包含一个printll 函数来打印整个列表。

我想这些功能将帮助您完成进一步的任务。目前,我没有包含free 功能,我认为你应该弄清楚。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM_PASSPORTS 5
#define MAX_BUFF_SIZE 10

typedef struct passport{
    char *getFirstNameFromApplicant;
    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);
        //get_input is the function from OP, I used fgets(firstname,MAX_BUFF_SIZE,stdin)
        get_input(firstname, MAX_BUFF_SIZE-1);
        append(&head,i,firstname);
    }

    printll(head);
    return 0;
}

void printll(Passport * currentPtr)
{
    while(currentPtr != NULL){
        printf("\nPassport id: %ld has been succesfully renewed. It belongs to %s",currentPtr->id, currentPtr->getFirstNameFromApplicant);
        currentPtr = currentPtr->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->getFirstNameFromApplicant = malloc(strlen(s)+1))== NULL){
        fprintf(stderr, "Passport Name Malloc Failed!"); 
        exit(3);
    }
    strcpy(newNode->getFirstNameFromApplicant, s);
    newNode->id = value;
    newNode->next = NULL;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多