久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 嵌入式程序員要學習的 經典數據結構

嵌入式程序員要學習的 經典數據結構 時間:2019-07-30      來源:創客學院,韓老師

1.什么是數據結構?

如果我們現在要整理圖書,有一堆書, 怎么整理呢?最簡單一種一個挨著一個放;或者給圖書分類,按照大分類再細分類整合;或者直接細分拆成很多類,每一類之間肯定會有很多的關系;但是有沒有想過這個書是要放在哪里的?要在什么環境下保存?這就需要給每種整理方法換個角度考慮,是都放在一個書架的一層呢,還是放在不同的書架隔層,又或者是放在圖書館里不同的書架上;這個提到的整理圖書討論的東西,就是數據結構將要研究的東西。回歸到咱們程序員,就需要把上面研究的整理方法和存放形式可以通過計算機記錄下來,因為畢竟我們整理圖書的目的是管理和使用圖書方便。所以歸根結底我們要把這種抽象的數據和數據間的關系反應給計算,用編程語言實現。那么我們可以知道:數據結構研究數據之間的關系

2.為什么學習數據結構?

 詳細研究數據間的管理機制,形成數據結構模型,遇到實際情況可以借鑒使用,這樣我們可以更快的應用到程序編程,設計和編寫出更優秀的軟件,且本質上是提高工程質量!

3.數據結構學什么?

大家應該知道一個經典的思想:程序 = 數據結構 + 算法;

 那咱們來談談之間的關系,和嵌入式程序員要注意的點。咱們是嵌入式程序員,要注重的是嵌入式編程思維,也就是要注重實踐性。所以學習的重點是數據結構的管理數據思想;算法是算法工程師去深入學習的,是研究性質的方法論,咱們很少遇到復雜的算法應用。咱們因此學習一些經典的數據結構中涉及的算法就已經夠用了,以后有興趣可以繼續專門深入了解算法這門學科;注意目前階段的學習中心在哪里。

數據結構研究三個角度:邏輯關系、存儲關系、運算關系。

以下圖示表明了三大角度在數據結構中的研究關系:

 邏輯關系是抽象的研究數據間關系,存儲關系就需要將這種關系對應到物理存儲,運算關系是在物理存儲后確定后需要研究的數據的應用操作;

4.幾個經典的線性結構:

(1)順序表

 上圖為一個還沒有存儲有效數據的空表。存儲空間是數組,記錄有效數據最后更新位置的是整型last,整體表結構為一個結構體;

結構代碼模型如下:

#define MAXSIZE 10

typedef  int  datatype;

typedef  int  postype;

struct list{

datatype  data[N];

postype last;

};

(2)單向鏈表

 上圖為有頭結點且不斷增加新數據結點的單向鏈表。存儲空間是一個結構體,結構體內需要有一個數據域和一個指針域,數據域存儲需要存儲的數據, 指針域要記錄下一個數據結點的首地址;

結構代碼模型如下:

typedef int datatype;

typedef struct node {

         datatype  data;

         struct node *  next;

}Linknode, *Linklist;

(3)雙向循環鏈表

 上圖為有頭結點且有n個數據結點的雙向循環鏈表。存儲空間是一個結構體,結構體內需要有一個數據域和兩個指針域,數據域存儲需要存儲的數據, 第一個指針域要記錄前一個數據結點的首地址,第二個指針域要記錄后一個數據結點的首地址;

結構代碼模型如下:

typedef int datatype;

typedef struct node{

datatype data;

struct node *prior;

struct node *next;

}DLinkNode,  * DLinkList;

(4)線性結構的應用結構:

①棧--先進后出,后進先出

1)順序棧:

 上圖為有n個數據存儲空間的順序棧。結構體是一個棧結構,結構體內需要有一個數據域和兩個整型標記,數據域是數組存儲需要存儲的數據, 第一個標記top要記錄最后一個入棧數據的數組下標,第二個標記len要記錄整個存儲空間的大小,方便知曉棧的存儲能力;

結構代碼模型如下:

typedef int datatype;

typedef struct node{

datatype *data;

int maxlen;

int top;

}SeqStack,*SeqStack_t;

2)鏈式棧

 上圖為有頭結點和n個數據存儲空間的鏈式棧。結構體是一個數據結點,結構體內需要有一個數據域和一個指針域,數據域是數組存儲需要存儲的數據, 指針域要記錄前一個入棧結點的首地址,棧頂為鏈表頭結點后第一個數據結點;

結構代碼模型如下:

typedef int datatype;

typedef struct node{

datatype data;

struct lstacknode * next;

}LinkStacknode, *LinkStacknode_t;

②隊列--先進先出,后進后出

1)順序隊列

 上圖為有n個數據存儲空間的順序隊列,需要注意的是這只是個理想模型,實際使用需要舍棄一個存儲空間,用于判斷空表滿表,只使用n-1個存儲空間。結構體是一個順序隊列,結構體內需要有數組作為數據存儲空間, 兩個標記, 第一個標記記錄隊頭數據所在位置的前一個位置的數組下標,第二個標記記錄隊尾數據所在位置的數組下標;

結構代碼模型如下:

#define N 10

typedef int datatype;

typedef struct seqqueue{

datatype data[N];

int front, rear;

}SeqQueue, *SeqQueue_t;

2)鏈式隊列

 上圖為有頭結點和n個數據存儲空間的鏈式隊列。鏈式隊列有兩個結構體模型,數據結點是第一個結構體,這個結構體內需要有一個數據域和一個指針域,數據域是數組存儲需要存儲的數據, 指針域要記錄后一個入棧隊結點的首地址;第二個結構體是隊列模型,結構體內需要兩個指針域,指針類型為第一個結構體類型的指針,一個指針front記錄隊列的隊頭結點首地址,隊頭為鏈表頭結點后第一個數據結點,另一個指針rear記錄隊列的隊尾結點首地址,隊尾為鏈表最后一個數據結點。

結構代碼模型如下:

typedef int datatype;

typedef struct node{

datatype data;

struct linkqueuenode *next;

}Queuenode, *Queuenode_t;

typedef struct linkqueue{

linkqueue_pnode front,rear;

}LinkQueue, *LinkQueue_t;

 

 在數據結構中還有其他非線性的數據模型,篇幅有限,這里就不列舉了,下次再聊。上面的結構應用很廣泛哦,感興趣的話一定要去研究實踐!

上一篇:ADC

下一篇:字符設備驅動

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部