Печать связанных списков со структурами - PullRequest
0 голосов
/ 07 мая 2019

Я получил домашнее задание, где мне нужно заполнить все функции. Теперь, когда я вхожу в 3-й отпечаток, я получаю ошибку, что ptr (переменная) не может получить доступ к данным (раньше, чем он мог?)

Я попытался напечатать значения перед отправкой их в функцию и посмотреть, что она получает, и она получает правильное имя, но в функции что-то напутано

Struct:

typedef struct {
    char name[32];
    char surname[32];
    char id[32];
    char position[64];
    int salary;
} EmployeeData;

typedef struct tEmployeeNode {
    EmployeeData data;
    struct tEmployeeNode *next;
} EmployeeNode;

Массив со всеми данными:

    EmployeeData data[4] = {
    { "John","Silver","200011123", "Mutineer", 3000 },
    { "David","Livesey","122233345", "Doctor", 7000 },
    { "Jim","Hawkins","201072716", "Cabin Boy", 1000 },
    { "John","Trelawney","122233444", "Squire", 200 } };

Создание узла

EmployeeNode *createEmployeeNode(EmployeeData data) {
    EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeData));
    temp->data = data; 
    temp->next = NULL;
    return temp;
}

Создание функции связанного списка

EmployeeNode *createListOfEmployees(EmployeeData *arr, int size) {
    int i;
    EmployeeNode *head, *ptr;
    EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeData));
    if (temp == NULL) {
        printf("Error\n");
        exit(1);
    }
    temp->data = arr[0];
    temp->next = NULL;
    head = temp;
    ptr = head;
    for (i =1; i < size; i++) {
        temp = createEmployeeNode(arr[i]);
        if (ptr->next != NULL) {
            ptr = ptr->next;
        }
        else {
            ptr->next = temp;
            temp->next = NULL;
        }
    }
    return head;
}

основная функция printf:

void printListOfEmployees(EmployeeNode *head) {
    EmployeeNode *ptr = head;
    while (ptr != NULL) {
        printEmployee(ptr->data);
        ptr = ptr->next;
    }
}

внутри функции printf:

void printEmployee(EmployeeData e) {
    printf("%s %s %s %s %d\n", e.name, e.surname, e.id, e.position, e.salary);
}

Здесь я на самом деле вызываю функции

    EmployeeNode *head = createListOfEmployees(data, 4);
    printf("Employees of the Espaniola Team:\n\n");
    printListOfEmployees(head);

Результат должен быть: а. все узлы массива должны быть в структуре с привязанным списком к следующему узлу и печатать все в правильном порядке. В основном моя проблема в том, что я теряю «Джима Хокинса» и не могу понять, почему.

Спасибо за помощь!

1 Ответ

1 голос
/ 07 мая 2019

Правильный текст функции createListOfEmployees (без проверки ошибок для краткости):

EmployeeNode *head= NULL;
EmployeeNode *previousnode = NULL;

for (int i = 0; i < size; i++) {
  EmployeeNode *newnode = createEmployeeNode(arr[i]);
  if (previousnode != NULL)
    previousnode->next = newnode;
  else
    head = newnode;

  previousnode = newnode;
}

return head;

Сохраняйте это простым.

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