




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第八章 結構(jigu)體與鏈表 掌握:結構體類型、結構體變量與指針的定義方法 掌握:結構體數組的定義和初始化方法 掌握:結構體變量成員的引用方法 掌握:鏈表的主要操作方法 掌握:共用體類型、共用體變量的定義方法 了解(lioji):typedef的用法 重點:結構體類型變量、數組和指針的應用 難點:鏈表的主要操作方法1C程序設計實例教程 山東科技大學機電學院共二十九頁8.1 結構體的定義(dngy)和引用一、結構(jigu)體類型定義 結構體類型定義的格式為:struct 結構體類型名 數據類型說明符1 結構體成員名1; 數據類型說明符2 結構體成員名2; 數據類型說明符n 結構體成員名n;
2、 ;舉例:2C程序設計實例教程 山東科技大學機電學院共二十九頁如學籍管理系統中學生信息由學號、姓名、年齡、10門課程成績和籍貫組成。定義學生信息的結構體類型(lixng)如下:struct students unsigned int id; char name20; char age; float score10; char address30; 3C程序設計(chn x sh j)實例教程 山東科技大學機電學院共二十九頁9.2 文件類型指針(zhzhn)二、結構體類型變量(binling)的定義 (1)首先定義結構體數據類型,格式如下:struct 結構體類型名數據類型說明符1 結構體成員名
3、1;數據類型說明符2 結構體成員名2;數據類型說明符n 結構體成員名n;struct 結構體類型名變量名稱表列;4C程序設計實例教程 山東科技大學機電學院共二十九頁(2)在定義結構體類型的同時定義結構體變量(binling),將結構體類型的定義和變量(binling)的定義放在一個說明語句中,格式如下:struct 結構體類型名數據類型說明符1 結構體成員名1;數據類型說明符2 結構體成員名2;數據類型說明符n 結構體成員名n;變量名稱表列;5C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁如:struct students unsigned int id; char name2
4、0; char age; float score10; char address30; stu1,stu2;6C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁三、結構體變量的初始化和成員引用 1.整體賦值法 若結構體類型(lixng)變量中各成員均是基本數據類型(lixng),則可以采用下面的方法:結構體變量= 初值表 ;對于存在結構體類型嵌套的變量,格式如下:結構體變量=成員1初值,成員2初值,子成員1,成員n初值;2. 分量賦值法 定義:分量賦值法就是用程序語句為結構體類型變量的某些成員進行賦值。方法:先書寫要賦值的成員名稱,然后利用賦值運算符或有關函數進行賦值。 如:st1
5、.birthday.year=1985;7C程序設計(chn x sh j)實例教程 山東科技大學機電學院共二十九頁8.2 結構(jigu)體數組一、結構體數組的定義 定義:可以參照結構體類型(lixng)變量的定義方法 形式 :struct 結構體類型名 數據類型說明符1 結構體成員名1; 數據類型說明符2 結構體成員名2; 數據類型說明符n 結構體成員名n; ; struct 結構體類型名 數組名常量表達式; 8C程序設計實例教程 山東科技大學機電學院共二十九頁實例如下:struct students unsigned int id; char name20; char age; floa
6、t score10; char address30;stu40;說明:以上代碼定義了由40個元素組成的students結構體數組,每個元素均是students類型(lixng),即都包含有學號id、姓名name、年齡age、成績score和地址address等成員信息。 9C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁二、結構體數組的初始化 1. 分行初始化 格式為:struct 結構體類型名 數組名元素個數=,; 2. 整體初始化 格式:struct 結構體類型名 數組名元素個數= , , , ;【例8.1】對某班級同學的總成績按升序排序。設每個同學的信息由學號、姓名、年齡、
7、籍貫、三門功課成績和總成績組成。 分析:對于結構體數組的排序方法(fngf),可以直接使用冒泡排序法和直接選擇排序法原理,關鍵是在進行數據交換時的操作,可以對數組元素的各個成員進行數據交換,也可以借助于相同類型的結構體變量進行數據交換。 10C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁8.3 指向結構(jigu)體的指針 一、結構體指針變量的定義 方法:在結構體變量名稱的前面加“*”符號即可。三種(sn zhn)定義形式 :(1)struct 結構體類型名;struct 結構體類型名 *指針變量名; (2)struct 結構體類型名*指針變量名; (3)struct*指針變量名
8、;11C程序設計實例教程 山東科技大學機電學院共二十九頁二、結構體指針(zhzhn)變量的賦值 格式為:結構體指針變量=&表達式; 三、結構體指針變量成員的引用 兩種形式:(1)(*結構體指針變量名).成員名;(2)結構體指針變量名-成員名。【例8.2】結構體指針的應用。 12C程序設計實例教程 山東科技(kj)大學機電學院共二十九頁#include stdio.hstruct studentsunsigned int id;char name10;char age;char address10;float score3;stu=1,zhangsan,20,qingdao,56,78,90;v
9、oid main()struct students *p=&stu;printf( id name age address score1 score2 score3 tscoren);printf(%3d%10s%3d%10s%7.1f%7.1f%7.1f%7.1fn,p-id,p-name, p -age, p-address,p-score0,p-score1,p-score2);13C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁四、指向結構(jigu)體數組的指針 對于結構體數組或結構體數組元素也同樣可以建立指向結構體數組或它的元素的指針變量,通過該變量來訪問結構體數組的元
10、素。【例8.3】結構體指針的應用 14C程序設計實例教程 山東科技(kj)大學機電學院共二十九頁五、結構體指針數組 結構體指針數組的定義:struct結構體類型名 *結構體數組名數組元素個數 結構體指針數組元素的賦值 結構體指針數組中的各個(gg)元素均是指針類型,因此,在賦值時必須使用指向同種類型結構體變量的指針。如:struct students*stu5,stu1;stu0=&stu1; 為數組的第一個元素賦值 15C程序設計(chn x sh j)實例教程 山東科技大學機電學院共二十九頁8.4 鏈表的基本操作 一、單鏈表 定義:鏈表是用一組任意的存儲單元來存放線性表的節點 。組成:在鏈
11、表結構(jigu)中存在一個指向鏈表頭結點的指針變量,如圖中的head,它存放一個地址,該地址指向一個元素,鏈表中每個元素稱為節點。 存儲形式:16C程序設計實例教程 山東科技(kj)大學機電學院共二十九頁二、內存操作函數 (1)malloc函數。函數原型:void * malloc(unsigned size)說明:該函數的原型在stdlib.h和alloc.h頭文件中功能:在內存中分配大小為size字節的連續存儲空間。(2)calloc函數。函數原型:void *calloc(unsigned num,unsigned size)說明:該函數的原型在stdlib.h和alloc.h頭文件中
12、功能:在內存中連續分配num個長度為size字節的存儲空間。(3)free函數。函數原型:void free(void * ptr)說明:該函數的原型在stdlib.h頭文件中。功能:釋放(shfng)有ptr所指向的內存。17C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁三、單鏈表的基本操作 1. 建立空鏈表在鏈表中存在一個“頭節點”,也就是指向目標鏈表首個節點的一個指針,在建立鏈表之前應該先定義這個指針并為其賦值。2. 顯示鏈表對于鏈表的輸出,應從頭指針開始,依次遍歷鏈表的每個節點,直到鏈表結尾(jiwi)(空指針)。3. 添加節點對鏈表按順序添加新的節點時,根據該節點與頭
13、指針之間的位置關系,一般有頭插法和尾插法兩種形式。 18C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁(1)頭插法 (2)尾插法 19C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁 4. 查找節點 (1)按序號查找:采用從頭節點開始逐個遍歷的方式,并在遍歷過程中記錄已經遍歷的個數,直到遍歷個數符合要求為止。 (2)按值查找 :按值查找是是自鏈表的頭節點開始,依次判斷節點數據域的某項數值(shz)與給定值是否相同 5. 插入節點 (1)后插法 20C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁(2)前插法 6. 刪除(shnch)節點 21C程序設計實例
14、教程 山東科技(kj)大學機電學院共二十九頁7. 節點排序方法:主要有冒泡排序、直接選擇排序等 舉例:以下是按姓名方式(fngsh)對鏈表的各節點進行升序排序。 22C程序設計實例教程 山東科技大學(dxu)機電學院共二十九頁comlist *sortbyname(comlist *h) comlist *p1=h,*p2,*p; while(p1-next!=NULL) p=p1; p2=p1-next; while(p2!=NULL) if(strcmp(p-name,p2-name)0) p=p2; p2=p2-next; if(p!=p1) exchangenode(p,p1); pr
15、intf(OKn); p1=p1-next; return(h);23C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁8.5 共用(n yn)體的定義和引用 一、共用體類型及變量的定義(dngy) 共用體類型的定義union 共用體類型名數據類型說明符1 共用體成員名1;數據類型說明符n 共用體成員名n;;2. 共用體變量的定義 union 共用體類型名數據類型說明符1 共用體成員名1;數據類型說明符n 共用體成員名n;變量名表列;24C程序設計實例教程 山東科技大學機電學院共二十九頁二、共用體變量的引用方法方法:只能引用共用體變量的成員,而不能引用整個共用體變量 。形式:a.l
16、g(引用共用體變量的lg成員) a.high(引用共用體變量的high成員)三、共用體變量的賦值 方法:采用按成員進行單獨賦值的方式,共用體變量在內存中存儲的結果是最后一次進行賦值操作的成員的數值。如: num.n=1000;四、共用體類型數據(shj)的特點 (1)同一個內存空間可以用來存放幾種不同類型的成員,但在某個時刻只能存放其中一個成員的數值;25C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁(2)共用體變量中所占內存單元的內容是最后一次存入的成員的數值;(3)共用體變量的地址和它的各成員的地址都相同(4)不能在定義共用體變量時對它進行初始化。【例8.5】利用(lyng
17、)共用體來獲取一個整型數的高、低字節的內容 。#include stdio.hunion int n; unsigned char bt2;num;void main() printf(Input a Number:); scanf(%d,&num.n); printf(nhigh=%X,low=%X,num.bt1,num.bt0);26C程序設計實例教程 山東科技大學機電(jdin)學院共二十九頁8.6 typedef定義(dngy)類型 一、何為typedef?定義:typedef為C語言的關鍵字,作用是為一種數據類型定義一個新名字。 應用形式為:typedef 已有類型(lixng)名
18、 新類型(lixng)名二、作用(1)用于對數據類型的命名 typedef int integer;integer i,j;(2)用于對數組和指針類型的命名 typedef int NUM10; (聲明NUM為整型數組類型)NUM a; (定義a為整型數組) 27C程序設計實例教程 山東科技大學機電學院共二十九頁三、typedef 與 #define 異同#define通常用于宏的定義,可以使用 #ifdef,#ifndef等來進行邏輯判斷,還可以使用#undef來取消定義。用typedef定義的變量類型在其所定義位置的函數或文件內部后續范圍內有效,可以任意使用。通常講,typedef要比#define要好,特別是在有指針(zhzhn)的場合。 28C程序設計(chn x sh j)實例教程 山東科技大學機電學院共二十九頁內容摘要第八章 結構體與鏈表。C程序設計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全質量領域系列課件《新安全生產法》
- 安全環保-特殊交通環境行駛的特點及注意事項
- 大數據數據挖掘模型強化學習模型重點基礎知識點
- 農作物種子繁育員必要的市場分析工具試題及答案
- 2024年裁判員等級考試難題解答與試題及答案
- 環境保護與農業植保員試題及答案結合
- 行政管理師證書考試準備寶典的試題及答案
- 2024年體育經紀人考試大綱解析試題及答案
- 模具保護技術試題及答案
- 模具設計師資格認證全景剖析試題及答案
- 米、面制品安全生產與管理考核試卷
- 資金過橋合同協議
- 2025年江蘇省連云港市東海縣中考英語一模試卷
- 2024年山東青島職業技術學院招聘筆試真題
- 2025-2030國內智能玩具行業市場發展現狀及競爭策略與投資發展研究報告
- 倉庫操作規程試題及答案
- 2025履約類保函擔保合同范本
- 2025年03月河北邯鄲武安市事業單位春季博碩人才引進55名筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 水土保持監測技術規范解讀與應用
- 2024年記者證考試時事新聞處理試題及答案
- 一年級開學行為習慣養成訓練方案
評論
0/150
提交評論