關於單鏈表C語言實現的一些疑惑

2021-06-23 06:27:46 字數 1039 閱讀 3708

單鏈表的c語言實現如下:

typedef struct nodelistnode;

即定義了乙個結構體 node,將他重新命名為listnode~

我的疑惑是,結構體名為 node,但是在結構體的定義中,居然還有乙個 node 型別的變數,

相當於在類myclass中定義乙個myclass型別的私有成員變數~~這點讓我很費解,後來才明白,這兩者關係其實是不一樣的

具體解釋

解釋一:

struct myclass

不管什麼型別的指標,在32位程式裡面都是32位四個位元組。

所以說這個myclass已經很明確了,總共8個位元組,完全有意義啊

structmyclass;

voidmain()

就像這段**完全合法一樣,myclass具體是什麼都不知道,但仍然可以使用它的指標,因為不管它是什麼型別的指標,都是四個位元組,都是一樣的

解釋二:

你只要記住一點,編譯器很聰明,能夠明白你這段**代表什麼意思,就夠了,如果再要深究,就只能研究編譯原理了。

編譯器先看到你定義了結構,然後看見你在這個結構體中又使用了這個結構,因為編譯器已經知道這是乙個結構體,所以他可以處理這種情況。如果你把結構中的struct node *next; 這一句,替換成}listnode *next; 編譯器就會報錯,因為他還沒有看見過這個listnode是什麼東西。

另外,你不能在你的結構體中,再定義乙個非指標型別的同樣的結構體,例如struct node next;(注意,沒有星號),這時,編譯器也應該報錯,為什麼,因為這會導致定義的無限延伸!也就是說,這個定義是乙個死迴圈,永遠停不下來。

所以說,鍊錶的c語言實現中,之所以能這樣使用,是因為裡面的那個變數時指標,而指標所佔的位元組數是已知的(不管什麼型別指標,在32位作業系統中,都是佔 4 個位元組)

關於單鏈表的一些常見問題

includeusing namespace std include includestruct listnode typedef listnode node void pushback node node,int data void printlist node node printf n 合併兩...

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...