[英]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.