簡體   English   中英

如何在 C 中構建 Linked_list_builder 函數

[英]How to build a Linked_list_builder function in C

我正在學習鏈表,我想創建一個創建鏈表的函數,之后我想創建一個 for 循環,它將在主函數中打印我們的鏈表。 我試過這個:

#include <stdio.h>
#include <stdlib.h>

typedef struct linked_list {
    int data;
    struct linked_list* link;
}node;


//building list 

node linked_list_builder(int length) {
    node* list;
    list = (node*) malloc(length * sizeof(node));
    
    for(int i=0;i<length;i++)
    {
        printf("Data in list no.%d at index %d = ",i+1,i);
        scanf("%d",list->data);
        list->link += 1; 
    }
    return *list;
}
 
int main() {
    int length;
    printf("Enter the length of Linked list:\n");
    scanf("%d", &length);

    node list = linked_list_builder(length);

    //printing list
    for(int i=0;i<length;i++)
    {
        printf("index %d->list %d = %d\n",i,i+1,list.data);
        list.link++;
    }

    return 0
}

我不知道確切的問題是什么,我不知道如何從函數中返回我的鏈表,以及如何實際旅行並打印它的數據?

你有兩個問題:

正如@WhozCraig 所指出的:

您一次為所有節點保留空間,如果可能的話,您無需創建一個列表(具有內存碎片的障礙並且還需要一個額外的指針來指向下一個節點),在這種情況下它會足以使用數組。

當您事先不知道所需的元素數量時,列表很有用。 如果您確實需要一個列表,請將列表的第一個元素的位置存儲在一個變量( head )中,並通過push函數將元素一個一個地添加到該列表中:

node *linked_list_push(node *tail, int data) {
    node *curr = calloc(1, sizeof(node));
    
    curr->data = data;
    if (tail != NULL) {
        tail->link = curr;
    }
    return curr;
}

node *head = NULL, *tail = NULL;
// pushing list
for (int i = 0; i < length; i++) {
    tail = linked_list_push(tail, i);
    if (head == NULL) {
        head = tail;
    }
}
// printing list
while (head) {
    node *temp = head;

    printf("%d\n", head->data);
    head = head->link;
    free(temp);
}

正如@Kuro 所指出的:

scanf想要一個指針:

scanf("%d",list->data);

應該

scanf("%d",&list->data);

暫無
暫無

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

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