欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言結構體使用之鏈表

 更新時間:2022年03月06日 11:32:27   作者:Embedded learner  
這篇文章主要介紹了C語言結構體使用之鏈表,下面文章主要圍繞結構體的概念和用法、結構體數(shù)組和結構體指針、包含結構體的結構體、結構體搭建鏈表方法、結構體及鏈表在產品應用場景等多個主題展開鏈表的相關資料,需要的小伙伴可以參考一下

一、結構體的概念

比如說學生的信息,包含了學生名稱、學號、性別、年齡等信息,這些參數(shù)可能有些是數(shù)組型、字符型、整型、甚至是結構體類型的數(shù)據(jù)。雖然這些都是不同類型的數(shù)據(jù),但是這些都是用來表達學生信息的數(shù)據(jù)。

二、結構體的用法

1、struct 結構體名稱 訪問方法: 結構體變量名.成員

{undefined
成員1;
成員2;
};

2、 typedef struct

{undefined
成員1;
成員2;
}結構體名稱;

在中大型產品中一般用第2種,因為結構體多了以后通過別名的方式定義結構體變量能夠大大提高代碼可讀性。

三、結構體數(shù)組和指針

  • 1、直接用struct聲明一個結構體,然后在定義結構體數(shù)組,struct 結構體名稱 數(shù)組名[數(shù)組大小]
  • 2、用typedef struct聲明一個結構體,并且為結構體重命名,通過重命名的方法定義結構體數(shù)組。結構體重命名 數(shù)組名[數(shù)組大小]

四、結構體指針

只要是存儲在內存中的變量或者數(shù)組或函數(shù)編譯器都會為他們分配一個地址,我們可以通過指針變量指向這個地址來訪問地址里面的數(shù),只要把指針變量定義成同數(shù)據(jù)類型就可以指向了,比如說要指向字符型變量就定義字符型指針變量,所以我們也可以定義結構體類型指針來指向它。

  • 1、直接用struct聲明一個結構體,然后在定義結構體指針,struct 結構體名稱 *結構體指針變量名
  • 2、用typedef struct聲明一個結構體,并且為結構體重命名,通過別名的方式定義結構體指針。結構體別名 *結構體指針變量名

結構體指針訪問成員方法 結構體指針變量名->成員名

五、包含結構體的結構體

學生信息包含姓名,學號,性別,出入日期等數(shù)據(jù),而出生日期又包含年月日這3個成員,所以把出生日期單獨聲明一個結構體,那么學生這個結構體就包含出生日期這個結構體,這種就是包含結構體的結構體。

六、鏈表

在數(shù)據(jù)結構里面,有一種數(shù)據(jù)結構叫做鏈表,鏈表通俗的說就是把多個結構體變量像鐵鏈一樣環(huán)環(huán)相扣連接起來,我們拿4個學生數(shù)據(jù)組成的鏈表來舉例,分析鏈表具體的工作原理。

#include<stdio.h>
/*只要具備多種屬性就可以用結構體來構造;比如串口具有多種信息,時鐘源,波特率,停止位,校驗位*/
typedef struct{
?? ?unsigned short Year;
?? ?unsigned char Mon;
?? ?unsigned char Day;
}today;/*這個結構體只是構造一下,本程序沒有用到*/
struct student{
?? ?unsigned char Name[20];
?? ?unsigned char number;
?? ?unsigned char sex;
?? ?student *pLast; /*雙向鏈表*/?
?? ?student *pNext;
};

int main()
{
?? ?unsigned char i;
?? ?struct student *pStu;
? ?? ?struct student stu1[4] =
?? ?{
?? ??? ?{"stu1",1,'m',0,0},
?? ??? ?{"stu2",2,'m',0,0},
?? ? ?? ?{"stu3",3,'m',0,0},
??? ? ?? ?{"stu4",4,'m',0,0},?? ?
? ?? ?};

?? ?stu1[0].pNext = &stu1[1];
?? ?stu1[1].pNext = &stu1[2];
?? ?stu1[2].pNext = &stu1[3];?? ?
?? ?stu1[3].pLast = &stu1[2];
?? ?stu1[2].pLast = &stu1[1];
?? ?stu1[1].pLast = &stu1[0];
?? ?pStu = &stu1[0];
?? ??? ?
?? ?for(i=0;i<4;i++)
?? ?{
?? ?printf("name=%s,number=%d,sex=%c\r\n",pStu->Name,pStu->number,pStu->sex);
?? ?pStu = pStu->pNext;?? ??? ?
?? ?}
?? ?pStu = &stu1[3];
?? ?printf("\r\n");?? ?
?? ?for(i=0;i<4;i++)
?? ?{
?? ?printf("name=%s,number=%d,sex=%c\r\n",pStu->Name,pStu->number,pStu->sex);
?? ?pStu = pStu->pLast;?? ??? ?
?? ?}?? ??? ?
?? ??? ?
?? ?return 0;
}

鏈表是基于結構體的一種線性的數(shù)據(jù)結構。
結構體的應用非常廣泛,這里我們記住一個黃金法則:只要是具備多種屬性的任何東西,都可以用結構體來構造,我們把這個東西叫做對象。比如說單片機的串口是不是有時鐘源、波特率、停止位、校驗位這些屬性?那么串口就是一個對象,可以用結構體來構造。

七、靜態(tài)鏈表

上面的鏈表是4個學生信息的結構體變量連接在一起,這種是靜態(tài)的鏈表,意思就是連接在一起的結構體變量數(shù)量是固定的,靜態(tài)創(chuàng)建鏈表的方法適用于一些固定好數(shù)量的數(shù)據(jù)結構。比如產品需要在LCD上面顯示多級菜單架構,一般使用按鍵或者觸摸去進入子菜單或者返回主菜單,那么就可以把這些主菜單和子菜單做成一個鏈表,那么配合結構體指針就可以很輕松的找到需要跳轉的菜單了,像這種菜單結構往往在功能定義的時候就要規(guī)劃清楚一共需要多少個菜單,每一個菜單有那些共同的屬性。

八、動態(tài)鏈表

動態(tài)鏈表的意思就是通過動態(tài)分配的方式把結構體變量連接起來,這種結構體變量的數(shù)量是未知的,會隨著某種條件增加或減少結構體變量的數(shù)量。比如說我要接收串口的數(shù)據(jù),如果串口一次性接收10個數(shù)據(jù)那么很好處理,我們直接定義一個數(shù)組,把大小設置成10就可以了。那如果我們不知道到底串口會來多少個數(shù)據(jù)的情況下,比如說有可能這一幀來100個,下一幀來1000個,那用數(shù)組來存儲是不是就很不方便,不知道到底該分配多大的數(shù)組,如果分配大小為1000的數(shù)組就會造成內存浪費,像我們就可以使用動態(tài)鏈表的方式來實現(xiàn)。
一般動態(tài)鏈表用在底層操作系統(tǒng)比較多,通常用來做消息隊列或者是任務創(chuàng)建。

到此這篇關于C語言結構體使用之鏈表的文章就介紹到這了,更多相關C語言鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言舉例講解i++與++i之間的區(qū)別

    C語言舉例講解i++與++i之間的區(qū)別

    這篇文章主要介紹了C語言中i++和++i的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C++/Php/Python/Shell 程序按行讀取文件或者控制臺的實現(xiàn)

    C++/Php/Python/Shell 程序按行讀取文件或者控制臺的實現(xiàn)

    下面小編就為大家?guī)硪黄狢++/Php/Python/Shell 程序按行讀取文件或者控制臺的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 解析C++各種變量及區(qū)別

    解析C++各種變量及區(qū)別

    在日常開發(fā)中,我們經常使用變量,常量,變量可以分為:全局變量、局部變量、靜態(tài)全局變量、靜態(tài)局部變量,接下來通過本文給大家介紹C++各種變量及區(qū)別,感興趣的朋友一起看看吧
    2022-05-05
  • C語言算法金手指摩爾投票法手撕絕大多數(shù)問題

    C語言算法金手指摩爾投票法手撕絕大多數(shù)問題

    這篇文章主要為大家介紹了C語言算法之金手指摩爾投票法手撕絕大多數(shù)問題的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C++利用函數(shù)動態(tài)創(chuàng)建二維數(shù)組

    C++利用函數(shù)動態(tài)創(chuàng)建二維數(shù)組

    這篇文章主要為大家詳細介紹了C++利用函數(shù)動態(tài)創(chuàng)建二維數(shù)組,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個數(shù)(Ctrl+Z終止輸入)

    C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個數(shù)(Ctrl+Z終止輸入)

    這篇文章主要介紹了C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個數(shù)(Ctrl+Z終止輸入) ,需要的朋友可以參考下
    2018-03-03
  • C++優(yōu)先隊列的使用小結

    C++優(yōu)先隊列的使用小結

    普通的隊列是一種先進先出的數(shù)據(jù)結構,元素在隊列尾追加,而從隊列頭刪除,在優(yōu)先隊列中,元素被賦予優(yōu)先級,本文主要介紹了C++優(yōu)先隊列的使用,感興趣的可以了解一下
    2023-11-11
  • 利用C/C++實現(xiàn)較完整貪吃蛇游戲

    利用C/C++實現(xiàn)較完整貪吃蛇游戲

    這篇文章主要為大家詳細介紹了利用C/C++實現(xiàn)較完整貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C++回溯算法中子集問題分析探討

    C++回溯算法中子集問題分析探討

    回溯法是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達到目標。但當探索到某一步時,發(fā)現(xiàn)原先選擇并不優(yōu)或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態(tài)的點稱為回溯點
    2023-03-03
  • C語言實現(xiàn)數(shù)獨輔助器(附源碼)

    C語言實現(xiàn)數(shù)獨輔助器(附源碼)

    數(shù)獨是源自瑞士的一種數(shù)學游戲。是一種運用紙、筆進行演算的邏輯游戲。本文將利用C語言制作一個數(shù)獨輔助器,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01

最新評論