大二時資料結構學的迷迷糊糊,很多問題沒有深究,書上怎麼寫我就怎麼記,沒有思考過一些細節。最近考研複習資料結構遇到不少費解的問題,問題很細,可能很多人都會不小心忽視。
單鏈表的定義
typedef struct lnodelnode,*linklist;
首先關於lnode的問題:
為啥要定義兩次lnode呢?兩次的作用是否相同呢?
答案是不相同!在結構體定義typedef struct aa中,前乙個a是結構體標記,後乙個a是你定義的乙個結構體資料型別。結構體標記沒有啥實際作用,其實可以隨便取名字,一般用來標記該結構體的某些資訊,唯一的用處就是你需要建立乙個結構時要會使用到它,比如說
struct a b;//建立乙個a這樣的結構體,名字叫b
後乙個a是你定義的乙個結構體資料型別。問題來了,啥叫我定義的乙個結構體的乙個資料型別?資料型別大家都知道吧,比如說int,double。它們有什麼用處?建立它們各自型別的新變數啊,比如說
int a;
double b;
同理,現在的a就相當於int,double,我可以直接用它定義乙個結構體型別的變數,比如說
a b;//此時b就是乙個a型別的結構體了,內含兩個成員變數,乙個是data,型別是elemtype(任意資料型別),乙個是結構體指標型別的指標 next,
它只能指向同為該結構體型別的某乙個節點
在結構體標記很長的時候,直接用結構體型別來建立乙個新的結構體變數就會很方便。
但是很多書上把結構體標記跟下面的結構體資料型別寫成一樣的,就像我上面寫的,就會引起很多初學者的誤解,以為他們之間必然有什麼聯絡,甚至就應該是相同的。這裡我修改掉
typedef struct hellolnode,*linklist;
關於*linklist的問題。
指標不得不說是c、c++語言裡面最費解的問題之一了。*linklist定義了乙個struct hello型別的指標,意思是說*linklist是與lnode不同名字但是同乙個型別,其實是等價的。linklist本質上是乙個指向該結構體的指標型別。比如說,我定義乙個linklist型別的指標p
linklist p;
那麼這個p就是指向該結構體的乙個指標,也就是所謂單鏈表中的頭指標。 結構體型別指標做函式引數(C
因為用到了這塊,所以轉了一篇文章。設有學生情況登記表如圖所示,用選擇排序法對該錶按從小到大進行排序。學生情況登記表 學號num 姓名name 8 性別 年齡age 成績score 101zhangm19 95.6 102zhaom20 89.0 103wangf18 96.5 104shanm20 ...
結構體指標中包含結構體指標
將c 轉化為c的過程中,一些c 的特性無法使用 類內私有變數在類內公共函式中使用,轉化為c的時候選擇用malloc的方式,申請一段記憶體空間去儲存它,在函式中傳指標形參去操作這些變數。這時候遇到乙個問題,結構體中包含了另乙個結構體的指標,這導致了我malloc的時候,另乙個結構體中的記憶體空間沒有申...
結構體指標與結構體中變數的指標
結構體指標與結構體變數指標的區別,在進行實現的工程專案中會有許多地方用到結構體指標的情況,在使用這前都需要先malloc一塊空間之後才能有空間進入儲存資料,例項 如下 include includetypedef struct student student t,pstudent t void pr...