《計算機(jī)程序設(shè)計(C語言)》第9章 第6節(jié) 結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表_第1頁
《計算機(jī)程序設(shè)計(C語言)》第9章 第6節(jié) 結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表_第2頁
《計算機(jī)程序設(shè)計(C語言)》第9章 第6節(jié) 結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表_第3頁
《計算機(jī)程序設(shè)計(C語言)》第9章 第6節(jié) 結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表_第4頁
《計算機(jī)程序設(shè)計(C語言)》第9章 第6節(jié) 結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第九章指針與結(jié)構(gòu)體9.6結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表

9.6結(jié)構(gòu)體類型變量構(gòu)成的簡單鏈表

9.6.1靜態(tài)簡單鏈表的創(chuàng)建

9.6.2動態(tài)單向鏈表的創(chuàng)建

我們在前面已經(jīng)學(xué)習(xí)了動態(tài)內(nèi)存分配malloc()函數(shù)功能和結(jié)構(gòu)體類型的定義。調(diào)用malloc()函數(shù)分配一個指定長度的存儲區(qū)域,且返回這個存儲區(qū)域的首地址。結(jié)構(gòu)體中的成員可以是指針成員,這些指針成員中可以有指向本結(jié)構(gòu)體的指針成員。結(jié)構(gòu)體類型定義時,若有指針成員的基類型為所在結(jié)構(gòu)體本身時,稱為“引用自身的結(jié)構(gòu)體”。如:struct

match_order{int

hm;

struct

match_order*next;}stu,*p,*q;該定義中的指針p就是一個指向struct

match_order結(jié)構(gòu)類型的指針,我們可以對其進(jìn)行如下賦值:(1)sru.next=&stu;存儲結(jié)構(gòu)如圖9-6-1所示。(2)p->next=&stu;存儲結(jié)構(gòu)如圖9-6-2所示。

(3)q->next=p;存儲結(jié)構(gòu)如圖9-6-3所示。結(jié)構(gòu)體類型變量構(gòu)成的鏈表根據(jù)其分配的存儲單元的性質(zhì)不同可分為靜態(tài)鏈表和動態(tài)鏈表兩大類,下面我們分別來學(xué)習(xí)簡單的靜態(tài)鏈表和動態(tài)鏈表。stu.hmstu.next圖9-6-1stu.hmstu.next圖9-6-2ppq圖9-6-39.6.1靜態(tài)簡單鏈表的創(chuàng)建

【例9.16】創(chuàng)建一個簡單的靜態(tài)鏈表#include<stdio.h>struct

match_order{int

hm;

struct

match_order*next;}s1,s2,s3,*h,*q;voidmain(){s1.hm=3;s2.hm=1;s3.hm=2;//分別給各變量中的hm成員賦值h=@s1;s1.next=@s2;s2.next=@s3;s3.next=′\0′;q=h;while(q)//將q順序后移,使其依次指向s1,s2,s3,輸出相應(yīng)的hm值

{printf("%d\t",q->hm);

q=q->next;}

printf("\n");}本例形成的存儲結(jié)構(gòu)如圖9-6-4所示。例中將三個struct

match_order類型的結(jié)構(gòu)體變量鏈接到一起,構(gòu)成以s1、s2、s3為結(jié)點(diǎn)的“鏈表”。因s1、s2、s3三個結(jié)點(diǎn)是單獨(dú)定義的結(jié)構(gòu)體變量,其內(nèi)容可以改變,而存儲單元是固定不變的,稱這樣的鏈表為“靜態(tài)鏈表”。而在實際應(yīng)用中,使用更為廣泛的“動態(tài)鏈表”s13h圖9-6-4s21s32\09.6.2動態(tài)單向鏈表的創(chuàng)建

動態(tài)鏈表中的結(jié)點(diǎn)需要調(diào)用malloc()等函數(shù)來分配指定長度的存儲單元,并返回其地址值,即形成一個動態(tài)的存儲單元?!纠?.16】創(chuàng)建一個單向靜態(tài)鏈表#include<stdio.h>struct

match_order{int

hm;

struct

match_order*next;};typedef

struct

match_orderORDER;voidmain(){intx;ORDER*h,*p,*s;h=(ORDER*)malloc(sizeof(ORDER));//生成頭結(jié)點(diǎn)

s=h;

scanf("%d",&x);while(x!=-1)//設(shè)-1為結(jié)束標(biāo)志

{

p=(ORDER*)malloc(sizeof(ORDER));//生成一個新結(jié)點(diǎn)

p->hm=x;//將x的值存入p結(jié)點(diǎn)的hm中

s->next=p;//將p結(jié)點(diǎn)鏈接到表尾

s=p;//s后移指向當(dāng)前表尾

scanf("%d",&x);//讀入新的數(shù)據(jù)到x}s->next=;p=h;//p指針回到鏈表開頭while(p!=′\0′)//將p順序后移,使其依次輸出相應(yīng)結(jié)點(diǎn)的hm值

{printf("%d\t",p->hm);

p=p->next;}

printf("\n");}說明:(1)首先通過調(diào)用malloc()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論