• <code id="zjelh"></code>

          <source id="zjelh"><form id="zjelh"></form></source><acronym id="zjelh"><form id="zjelh"><blockquote id="zjelh"></blockquote></form></acronym>

          1. <acronym id="zjelh"><form id="zjelh"></form></acronym>

            <input id="zjelh"><rt id="zjelh"></rt></input>
            <var id="zjelh"><rt id="zjelh"></rt></var>
            <source id="zjelh"><form id="zjelh"><del id="zjelh"></del></form></source>

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

            嵌入式程序員要學習的 經典數據結構 時間: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-2018 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號,京公海網安備11010802025203號

            回到頂部

            有位老師想和您聊一聊

            yy4480影院