新手對於鍊錶定義 linklist的理解障礙

2021-10-08 11:50:53 字數 1657 閱讀 7684

@[toc]新手對於鍊錶定義時*linklist的理解障礙

剛開始接觸資料結構。學到鍊錶時有定義

typedef

struct node

node,*linklist;

一直不理解,指標星號到底放在哪的具體規則。

typedef int *int_type;

怎麼使用時,int_type j;就等於int *j;了呢?

我覺得typedef 應該這樣用才對啊:

typedef int* int_type;

所以看到鍊錶指標定義的時候很懵,

linklist l;怎麼和node *l;同等呢?

我覺得應該是*linklistnode等價,所以如之前的int *定義一樣,也應該是錯的,或者說我無法理解。

實際是int *i等價於int* i等價於int * i

(這裡可能代表的實際含義差別,習慣差別就不討論了)

這裡我誤解有兩個點:

1、將typedef 和#define 等同

2、*位置的理解

所以最後初學者可將其定義借助(僅僅是借助)

int i, *j;宣告整型i和整型指標j

int* i, j;宣告整型指標i和整型j

來理解。

故文首可改為

typedef

struct nodenode;

typedef

struct node

* linklist;

甚至

typedef

struct nodenode, * linklist;

以及

typedef

struct nodenode,(*linklist);

再加兩點關於新手對typedef理解的方法(網上看到的,這裡記錄一下,加深理解)

1、注意轉定義前後的差別

之前說連續宣告時,int* i, j;宣告整型指標i和整型j,但是如果typedef int *inttype; inttype i,j;呢?這裡結果其實相當於int *i,*j;

測試時給i賦值指標時正常,而給j賦值常數時直接報錯,就不展示了。

2、不常見的轉定義

typedef char **pp;

typedef int array[8];

當腦子不好使時,只需去掉typedef,看看剩下的句子是宣告什麼,那麼,就知道再次使用重定義後的含義了。

比如上文pp可以宣告乙個指向指標的指標;

array可以宣告容量為8的整型陣列。

-完-ps:另外,星號asterisk,指標pointer…

**貼輕噴,希望大佬看到可以給點深入見解。

對於鍊錶的操作

include include include define list init size 80 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std typedef int status typedef int...

對於建立鍊錶引發的思考

今天刷到一道鍊錶建立的題。平時做的基本是題目給你提供好的鍊錶,而不需要自己建立。舉個例子,對於vector來說,其實,當我們宣告如 vectorv 10,0 所呼叫的vector類的建構函式內部呼叫了new來給物件分配了空間。因此,當你需要建立諸如 鍊錶,二叉樹等結構時,對於每乙個新加入結點,都必須...

鍊錶定義 鍊錶的插入 鍊錶的刪除 鍊錶的查詢

鍊錶的定義 鍊錶是一種常見的重要的資料結構。它是動態地進行儲存分配的一種結構。它可以根據需要開闢記憶體單元。鍊錶有乙個 頭指標 變數,以head表示,它存放乙個位址。該位址指向乙個元素。鍊錶中每乙個元素稱為 結點 每個結點都應包括兩個部分 一為使用者需要用的實際資料,二為下乙個結點的位址。因此,he...