@[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;
同等呢?
我覺得應該是*linklist
和node
等價,所以如之前的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...