簡體   English   中英

為什么單向鏈表需要嵌套結構?

[英]Why nested structure is needed in singly linked list?

我是數據結構和算法的新手。 正確知道我正在學習單鏈表並且我對一段創建鏈表的代碼感到困惑。

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

struct node
{
    int data;
    struct node *next;
};

int main()
{
    int n;
    struct node *head = NULL;
    head = malloc(sizeof(struct node));

    head->data = 36; 
    head->next = NULL;

    printf("%d", head->data);
}

我的問題是為什么我們必須使用struct node *next; 部分為了參考下一個節點的 memory 位置。
為什么我們不能改用int *next

這個定義

struct node
{
    int data;
    struct node *next;
};

解釋
“這是一個節點,在一個 int 上攜帶信息並指向另一個節點(如果不是 NULL),這又可能指向另一個節點......等等。”
一個典型的鏈表。

這就是我對您的替代方案的理解:

struct node
{
    int data;
    int *next;
};

它會解釋:
“這是一個節點,在一個 int 上攜帶信息並指向另一個 int(如果不是 NULL)。”
但是一個 int 不能提供對另一個 int 的訪問。 所以這個可以提供對一個或兩個整數的信息的訪問。
然而,鏈表的想法是它可以(假設內存)提供對不確定且數量相當多的節點的訪問。

事實上,你可以這樣寫

struct node
{
    int data;
    int *next;
};

要分配您可以編寫的頭節點(就像您已經做的那樣)

head = malloc(sizeof(struct node));

head->data = 36; 
head->next = NULL;

如果你想分配你必須寫的下一個節點

head->next = malloc( sizeof( struct node ) );

但是要為新創建的節點賦值,您必須編寫

( ( struct node * )head->next )->data = 37;
( ( struct node * )head->next )->next = NULL;

這樣的代碼只會讓代碼的讀者感到困惑。

也就是說,您正在為類型為struct node的 object 分配 memory,但隨后您將指向分配的 memory 的指針解釋為具有類型int *而不是使用類型為struct node *的指針。 然后再次為 object 類型的struct node賦值,您需要將int *類型的指針轉換為struct node *類型。 這樣的代碼很容易出錯。

暫無
暫無

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

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