資料結構中的C語言基礎,送給正在刷王道的考研黨

2021-10-02 07:47:14 字數 2249 閱讀 5597

國內高校的資料結構教材大都選自清華大學嚴蔚敏老師的書,考慮到大多數同學c語言的基礎不是很好,尤其是對結構體和指標的理解不深刻的同學,如果直接去看資料結構中用到的各種結構體的定義,就不是很友好,因此寫下這篇部落格,串講一下常見的資料結構的結構體定義以及一些細節問題~

//比如單鏈表的結構體的定義:

typedef

struct lnodelnode,

*linklist;

由於各種輔導書或者一般的教材**不是非常規範,在定義乙個鍊錶的結點的時候也是多種多樣的,這樣導致大家在閱讀**的時候會糾結各種各樣的寫法~

我們先回憶一下c語言中的關鍵字typedef,該關鍵字的作用是「起別名」,是將乙個已知型別起另外乙個名字。

比如我們來看大家最熟悉的整形(

int)

我們定義乙個整形變數a:

int a;

我們還可以給int起乙個別名: typedef

int myint 此時我們如果想定義乙個整形變數b,可以採用如下語法:

myint b;

//它等價於int b;

搞清楚typedef的作用以後,我們回到最初的單鏈表的結構體的定義中來。

我們知道在c語言中如果要定義乙個結構體變數或者結構體指標的時候,需要使用關鍵字struct

(補充一句:c++中是不需要的)

struct lnode* head;

//c語言定義乙個單鏈表的頭指標

我們為了省略關鍵字struct 所以使用

typedef

struct lnode lnode

這樣我們就可以省略掉struct這個關鍵字了,因為我們相當於做了typedef

struct lnode lnode;

此時struct lnode 的別名就叫作lnode 這樣我們在寫**的時候就可以省略掉struct 這個關鍵字

所以lnode* head;

//它等價於struct lnode* head;

討論完第乙個大家可能覺得有問題的地方以後,我們來看第二個關於 linklist 的問題:在說這個問題之前,我們先來看乙個大家的易錯點,這也是c語言考試中比較常考的乙個知識點~

//例如 我們定義兩個整形變數a和b:

int a,b;

//它等價於int a; int b;

我們再定義兩個整形指標p和q:

int* p,

*q;//它等價於int *p; int *q;

但是很多c語言基礎不紮實的同學,可能在定義指標的時候會出現乙個小小的錯誤

還是定義兩個整形指標p和q,不少同學會有下面的寫法:

int *p,q;

這裡等價的寫法其實是:int *p; int q; 實際上它是乙個整形指標和乙個整形變數,而並非p和q兩個指標,所以回歸到我們的單鏈表中,就會有同學犯同樣的錯誤:

lnode* head,p;  看似正確,但是是乙個很細節的錯誤,實際上它定義的是是lnode* head;  lnode p;  

而正確的寫法應該是:lnode* head,

*p; 這個等價於lnode* head; lnode* p; 這才是我們想要的正確結果

為了防止這個細節錯誤的發生,我們將*和lnode放在一起並起別名為linklist

也就是typedef

struct lnode

*linklist;

簡單化簡一下就是:

typedef

struct lnode* linklist;

現在linklist head; 就等價於lnode* head;

這樣我們就可以少寫乙個* 同時也可以減少上面的細節錯誤

與此同時,如果我們需要定義多個結點指標,只需要:

linklist p,q,r;

等價於:

lnode *p,

*q,*r;

等價於:

lnode* p;

lnode* q;

lnode* r

總結如下:

在如下的定義的前提下:

typedef

struct lnodelnode,

*linklist;

1.struct lnode* head;

2. lnode *head;

3. linklist head;

以上三種定義是等價的

C 基礎 C 中的資料結構

陣列具有以下的特點 陣列屬於線性結構,在記憶體中是連續存放的。陣列的元素型別必須相同。陣列可以直接通過下標訪問。陣列的查詢速度非常快,新增和刪除速度慢。陣列在初始化時要指定陣列長度。動態陣列具有以下的特點 arraylist的底層其實就是乙個陣列。arraylist在宣告時不必指定長度,會根據儲存的...

C語言基礎(十二) 資料結構概覽

資料 類 資料物件 集合 資料元素 類物件 資料項 屬性 什麼是資料結構?概念 相互之間存在一種或多種特定關係的資料元素 類物件 的集合。資料結構包括 資料的邏輯結構 數學形式 集合結構 線性結構 1 1 樹形結構 1 n 圖形結構 n n 資料的物理結構 儲存形式 順序儲存形式 ep.陣列 鏈式儲...

C語言的資料結構

資料型別 基本資料型別 構造資料型別 指標型別 空型別。1 基本資料型別 不能再分解為其他型別,如整型 int 字元型 char 浮點型 float double 列舉 enum 整型 int 十進位制 八進位制 十六進製制 a 十進位制 無字首,其數碼為0 9 b 八進位制 必須以0開頭,數碼取值...