簡體   English   中英

使用結構打印鏈接列表

[英]Print Linked lists with Structs

我得到了一項家庭作業,需要填寫所有功能。 現在,當我進入第三張打印紙時,我得到一個錯誤,即ptr(variable)無法訪問數據(在他可以之前?)

我嘗試在將值發送到函數之前打印這些值,看看它得到了什么,並且得到了正確的名稱,但是函數中的內容有些混亂

結構:

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);

結果應為: 所有數組節點都應在Struct中,並帶有指向下一個節點的鏈接列表,並按正確的順序打印所有內容。 主要是我的問題是我輸了“吉姆·霍金斯”,無法弄清楚原因。

謝謝您的幫助!

正確的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;

把事情簡單化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM