#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;
}
}