版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
高級語言程序設(shè)計揭安全jieanquan@163.com江西師范大學計算機信息工程學院高級語言程序設(shè)計——基于計算思維能力培養(yǎng)高級語言程序設(shè)計——基于計算思維能力培養(yǎng)第8章結(jié)構(gòu)體及其應用揭安全jieanquan@163.com江西師范大學計算機信息工程學院主要內(nèi)容結(jié)構(gòu)體類型與結(jié)構(gòu)體變量指針結(jié)構(gòu)體的指針向函數(shù)傳遞結(jié)構(gòu)體結(jié)構(gòu)體數(shù)組動態(tài)數(shù)據(jù)結(jié)構(gòu)——單鏈表本章思維導圖為何要用結(jié)構(gòu)體8.18.1為何要用結(jié)構(gòu)體C語言中學習的基本數(shù)據(jù)類型都不能獨立地來表示這些對象的全部屬性。結(jié)構(gòu)體類型與
結(jié)構(gòu)體變量8.28.2.1結(jié)構(gòu)體類型的聲明結(jié)構(gòu)體類型定義的一般格式為: struct結(jié)構(gòu)體類型名 {
數(shù)據(jù)類型
屬性1;
數(shù)據(jù)類型
屬性2; …
數(shù)據(jù)類型
屬性n;};例如,structstudent{ charid[13]; //學號 charname[9]; //姓名 intage; //年齡 charsex; //性別 charsfzh[19]; //身份證號 charaddress[61]; //家庭住址 chartelNumber[12]; //電話號碼 charclassName[21]; //班級名稱};structdate{intyear;intmonth;intday;};結(jié)構(gòu)體類型的定義可以嵌套,即可以利用一個已定義的結(jié)構(gòu)體類型作為別外一個結(jié)構(gòu)體類型的屬性。structstudent{ charid[13]; //學號 charname[9]; //姓名
structdatebirthday; //生日 charsex; //性別 charsfzh[19]; //身份證號 charaddress[61]; //家庭住址 chartelNumber[12]; //電話號碼 charclassName[21]; //班級名稱};8.2.2結(jié)構(gòu)體變量的定義1、結(jié)構(gòu)體變量定義的格式我們可以利用之前已定義好的structstudent結(jié)構(gòu)體類型來聲明學生結(jié)構(gòu)體變量。structstudents1,s2;注意:結(jié)構(gòu)體類型的完整名稱為structstudent。為方便書寫,我們可以用類型定義符typedef將structstudent命名為一個新的名稱。如:typedefstructstudentstuStru;//將structstudent命名為stuStru之后,便可在程序中使用stuStru等價地表示structstudent。例如:stuStrus1,s2;定義了兩個學生結(jié)構(gòu)體變量s1和s2。2、結(jié)構(gòu)體變量占用的字節(jié)數(shù)結(jié)構(gòu)體中的成員按定義順序占用連續(xù)的存儲空間。每個結(jié)構(gòu)體變量占用的字節(jié)數(shù)至少需等于所有成員(屬性)占用的內(nèi)存之和。我們可以用sizeof運算符來獲得結(jié)構(gòu)體變量占用的字節(jié)數(shù)。 sizeof(stuStru);
或 sizeof(s1);8.2.3對結(jié)構(gòu)體變量的操作對結(jié)構(gòu)體變量的操作應以其屬性為基本單位,具體格式如下:
結(jié)構(gòu)體變量名.成員名
其中“.”運算符為成員運算符。例如: stuStrus1,s2;
則s1.id表示s1的學號,表示s1的姓名等。注意事項:(1)在訪問結(jié)構(gòu)體變量的成員時,要根據(jù)結(jié)構(gòu)體變量的成員類型來進行相應的操作。例如:strcpy(s1.id,"201400120001");
可將"201400120001"存入s1的學號。注意:s1.id="201400120001"是錯誤的。注意事項:(2)對于嵌套的結(jié)構(gòu)體變量,應該逐級訪問其成員,直至非結(jié)構(gòu)體成員。如:s1.birthday.year=1996;s1.birthday.month=10;s1.birthday.day=20;完成將s1的生日設(shè)置為1996年10月20日。注意事項:(3)不能將結(jié)構(gòu)體變量作為一個整體進行輸入輸出,只能對變量中的各個成員輸入輸出。例如:gets(); //輸入s1的姓名printf("%s",); //輸出s1的姓名scanf("%d",&s1.birthday.year);//輸入s1的出生年份printf("%d",s1.birthday.year);//輸出s1的出生年份注意事項:(4)兩個同類型的結(jié)構(gòu)體變量可以直接賦值,賦值號右邊結(jié)構(gòu)體變量的成員將依次賦值給左邊結(jié)構(gòu)體變量的各個成員。例如:s2=s1;將使s2與s1具有相同的屬性值。8.2.4結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量可以在聲明時進行初始化,變量后面的一組數(shù)據(jù)用“{}”括起來,其順序應該與結(jié)構(gòu)體中的成員(屬性)順序保持一致,且對應的類型應賦值相容。例如: stuStrus1={"201400120001","李明",{1996,10,20},'M',"36010119961020****","南昌市東湖區(qū)","","物聯(lián)網(wǎng)1班"};【例8.1】結(jié)構(gòu)體類型定義及結(jié)構(gòu)體變量的定義與初始化示例。#include<stdio.h>structdate{ intyear; intmonth; intday;};【例8.1】結(jié)構(gòu)體類型定義及結(jié)構(gòu)體變量的定義與初始化示例。structstudent{ charid[13]; //學號 charname[9]; //姓名
structdatebirthday; //生日 charsex; //性別 charsfzh[19]; //身份證號 charaddress[61]; //家庭住址 chartelNumber[12]; //電話號碼 charclassName[21]; //班級名稱};typedefstructstudentstuStru;intmain(){stuStrus1={"201400120001","李明",{1996,10,20},'M',"36010119961020****","南昌市東湖區(qū)","","物聯(lián)網(wǎng)1班"};stuStrus2;
s2=s1; //結(jié)構(gòu)體變量賦值printf("學
號:%s\n",s2.id);printf("姓
名:%s\n",);printf("出生日期:%d-%d-%d\n",s2.birthday.year,s2.birthday.month,s2.birthday.day);printf("性
別:%s\n",s2.sex=='M'?"男":"女");printf("身份證號:%s\n",s2.sfzh);printf("家庭住址:%s\n",s2.address);printf("電話號碼:%s\n",s2.telNumber);printf("班級名稱:%s\n",s2.className);return0;}學號:201400120001姓名:李明出生日期:1996-10-20性別:男身份證號:36010119961020****家庭住址:南昌市東湖區(qū)電話號碼:班級名稱:物聯(lián)網(wǎng)1班程序運行情況如下:指向結(jié)構(gòu)體的指針8.38.3指向結(jié)構(gòu)體的指針結(jié)構(gòu)體指針變量的定義格式如下:結(jié)構(gòu)體類型名*指針變量名;例如,對例8.1定義的結(jié)構(gòu)體類型stuStru,可以定義結(jié)構(gòu)體變量和指針變量: stuStrus,*p; p=&s;將使指針p保存s的首地址。當結(jié)構(gòu)體指針指向某結(jié)構(gòu)體變量后,借助指針有兩種方式來訪問該指針指向的對象屬性。(1)通過“(*指針).屬性名”來訪問指針指向的對象的屬性。例如,若p為指向結(jié)構(gòu)體變量s的指針,則:scanf("%d",&(*p).birthday.year);printf("%s",(*p).name);分別完成p指向?qū)ο蟮某錾攴莸妮斎牒托彰妮敵?。?)通過“指針->屬性名”來訪問指針指向的對象的屬性(->運算符由減號-和大于號>組合而成)。當p為指向結(jié)構(gòu)體變量s的指針時p->birthday.year可引用s的出生年份即s.birthday.year;p->name可引用。特別地,當p為結(jié)構(gòu)體類型的指針時,可以通過malloc函數(shù)來為p動態(tài)分配結(jié)構(gòu)體空間,如: stuStru*p; p=(stuStru*)malloc(sizeof(stuStru));當p指向的動態(tài)結(jié)構(gòu)體使用完成后,應采用free(p);語句來將該空間釋放。向函數(shù)傳遞結(jié)構(gòu)體8.48.4.1值傳遞傳值調(diào)用為單向值傳遞,函數(shù)調(diào)用發(fā)生時,系統(tǒng)將結(jié)構(gòu)體變量的值拷貝一份給形式參數(shù),在函數(shù)中所有的操作都是針對形式參數(shù)進行的,實際參數(shù)的值不會因形參值的改變而改變。#include<stdio.h>structdate{ intyear; intmonth; intday;};【例8.2】結(jié)構(gòu)體變量傳值調(diào)用示例。voidfun(structdated){d.year=2008;d.month=8;d.day=8;}intmain(){structdated={2014,9,1};printf("%d-%d-%d\n",d.year,d.month,d.day);fun(d); //傳值調(diào)用printf("%d-%d-%d\n",d.year,d.month,d.day);return0;}2014-9-12014-9-18.4.2地址傳遞當函數(shù)的形參為指向結(jié)構(gòu)體變量的指針類型時,可以將結(jié)構(gòu)體變量的地址作為函數(shù)的實參,完成結(jié)構(gòu)體變量的按地址調(diào)用。【例8.3】結(jié)構(gòu)體變量傳地址調(diào)用示例。#include<stdio.h>structdate{ intyear; intmonth; intday;};voidfun(structdate*p){
p->year=2008;p->month=8;
p->day=8;}intmain(){structdated={2014,9,1};printf("%d-%d-%d\n",d.year,d.month,d.day);fun(&d); //傳地址調(diào)用printf("%d-%d-%d\n",d.year,d.month,d.day);return0;}2014-9-12008-8-8如果結(jié)構(gòu)體變量只想被函數(shù)引用,而不想被其修改,可以用const修辭函數(shù)的形參聲明。如:voidfun(conststructdate*p)
則在程序中只能訪問p指向的結(jié)構(gòu)體變量,而不能對它進行修改。結(jié)構(gòu)體數(shù)組8.58.5結(jié)構(gòu)體數(shù)組序號班級名稱姓名學號022級網(wǎng)絡工程聶加望2208066047122級網(wǎng)絡工程潘杰2208066048222級網(wǎng)絡工程秦彪2208066049322級網(wǎng)絡工程邱強2208066051422級網(wǎng)絡工程唐重喜22080660548.5結(jié)構(gòu)體數(shù)組8.5.1結(jié)構(gòu)體數(shù)組的定義最常用的結(jié)構(gòu)體一維數(shù)組的定義格式如下:結(jié)構(gòu)體類型
數(shù)組名[數(shù)組大小];例如,假設(shè)stuStru是已定義好的學生結(jié)構(gòu)體類型,則下面的語句定義了大小為10的學生結(jié)構(gòu)體數(shù)組s。stuStrus[10];訪問結(jié)構(gòu)體數(shù)組的方法與普通數(shù)組類似,通過下標來引用數(shù)組元素。例如: printf("%s",s[2].id);當然,我們也可以用動態(tài)內(nèi)存分配的方法,來獲得動態(tài)結(jié)構(gòu)體數(shù)組。例如: stuStru*s; s=(stuStru*)malloc(10*sizeof(stuStru));8.5.2結(jié)構(gòu)體數(shù)組的初始化與引用1、結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組在定義的同時,可以進行初始化,初始化結(jié)構(gòu)體數(shù)組的規(guī)則與初始化普通數(shù)組具有類似的規(guī)則。8.5.2結(jié)構(gòu)體數(shù)組的初始化與引用1、結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化列表包括在一對“{}”內(nèi),在其內(nèi)部每個元素的成員初始化列表用“{}”括起來。若只對部分元素初始化,則其它元素將被自動初始化為0。當省略數(shù)組大小時,系統(tǒng)會根據(jù)初始化列表的項數(shù)來自動確定數(shù)組大小?!纠?.4】結(jié)構(gòu)體數(shù)組的初始化與引用示例。#include<stdio.h>#defineN5structbook{charid[6]; //圖書編號charname[31]; //書名floatprice; //單價charauthor[13]; //作者};typedefstructbookbookStru;intmain(){bookStrub[N]={{"10001","C語言程序設(shè)計現(xiàn)代方法",79,"K.N.King"},{"10002","CPrimerPlus(第五版)",60,"StephenPrata"},{"10003","C語言程序設(shè)計",43,"蘇小紅等"},{"10004","程序設(shè)計基礎(chǔ)(第3版)",35,"吳文虎"}};inti;printf("編號
圖書名稱
單價
作者\n");for(i=0;i<N;i++){ printf("%-8s",b[i].id); //輸出圖書編號 printf("%-30s",b[i].name); //輸出書名 printf("%-8.2f",b[i].price); //輸出單價 printf("%-12s\n",b[i].author); //輸出作者}return0;}2、利用指針訪問結(jié)構(gòu)體數(shù)組當結(jié)構(gòu)體指針指向結(jié)構(gòu)體數(shù)組時,可以通過結(jié)構(gòu)體指針來訪問數(shù)組各元素,對結(jié)構(gòu)體指針執(zhí)行算術(shù)運算是以結(jié)構(gòu)體變量占用的字節(jié)數(shù)為基本單位的?!纠?.5】指針訪問結(jié)構(gòu)體數(shù)組示例#include<stdio.h>#defineN100structbook{charid[6]; //圖書編號charname[31]; //書名floatprice; //單價charauthor[13]; //作者};typedefstructbookbookStru;intmain(){bookStrub[N],*p;intn;p=b;printf("請輸入圖書數(shù)量:");scanf("%d",&n);if(n<N){printf("請按以下格式輸入%d本圖書信息(用Tab鍵分隔):\n",n);printf("編號
圖書名稱
單價
作者\n");while(p<b+n){scanf("%s",p->id); //輸入圖書編號scanf("%s",p->name); //輸入圖書名稱scanf("%f",&p->price); //輸入圖書單價scanf("%s",p->author); //輸入圖書作者p++;}
printf("編號
圖書名稱
單價
作者\n");printf("----------------------------------------------------\n");for(p=b;p<b+n;p++){printf("%-8s",p->id); printf("%-30s",(*p).name);printf("%-8.2f",(*p).price);printf("%-12s\n",p->author);}}return0;}請輸入圖書數(shù)量:3↙請按以下格式輸入3本圖書信息(用Tab鍵分隔):編號圖書名稱
單價作者10001C語言程序設(shè)計現(xiàn)代方法79.00K.N.King↙10002CPrimerPlus(第五版)
60.00StephenPrata↙10003C語言程序設(shè)計
43.00蘇小紅等↙編號圖書名稱
單價作者------------------------------------------------------------------------10001C語言程序設(shè)計現(xiàn)代方法79.00K.N.King10002CPrimerPlus(第五版)60.00StephenPrata10003C語言程序設(shè)計43.00蘇小紅等8.5.3結(jié)構(gòu)體數(shù)組的應用準考證號姓名語文數(shù)學英語綜合總分110100101張三120123110265
110100102李四96102130242
…
【例8.5】試編寫程序,定義用于存儲學生信息的結(jié)構(gòu)體數(shù)組,輸入學生的準考證號、姓名和成績信息,計算每位學生的總分,并按總分由高到低輸出學生信息表。成績統(tǒng)計輸入求和排序輸出#include<stdio.h>#defineN10000structstudent{charid[10]; //準考證號charname[9]; //姓名floatscore[4]; //大小為4的數(shù)組,分別存儲4門課程分數(shù)floattotal; //總分};typedefstructstudentstuStru;/*@函數(shù)名稱:input入口參數(shù):stuStrus[]@函數(shù)功能:學生信息錄入,函數(shù)返回信息輸入成功的學生人數(shù)*/intinput(stuStrus[]){intn=-1,i;printf("請按下列格式輸入學生信息(行首輸入q結(jié)束輸入):\n");printf("----------------------------------------------------\n");printf("準考證號\t姓名\t語文\t數(shù)學\t英語\t綜合\n");do{n++;
scanf("%s",s[n].id); //輸入準考證號if(s[n].id[0]=='q'||s[n].id[0]=='Q')
break;scanf("%s",s[n].name); //輸入姓名for(i=0;i<4;i++) //輸入4門課程成績scanf("%f",&s[n].score[i]);}while(1);returnn; //返回有效學生人數(shù)}/*@函數(shù)名稱:sum入口參數(shù):stuStru*s,intn@函數(shù)功能:求學生的高考總分*/voidsum(stuStru*s,intn){inti,j;stuStru*p=s; //采用指針法訪問數(shù)組while(p<s+n){p->total=0; //總分清0for(j=0;j<4;j++)p->total+=p->score[j];
p++;}}/*@函數(shù)名稱:selectSort入口參數(shù):stuStrus[],intn@函數(shù)功能:采用選擇排序法對學生信息按總分由高到低排序*/voidselectSort(stuStrus[],intn){inti,j,k,maxIndex;stuStrutemp;for(i=0;i<n-1;i++){maxIndex=i;for(j=i+1;j<n;j++) //查找最高分所在記錄if(s[j].total>s[maxIndex].total)maxIndex=j;if(i!=maxIndex){temp=s[i];s[i]=s[maxIndex];s[maxIndex]=temp;}}}/*@函數(shù)名稱:print入口參數(shù):stuStrus[],intn@函數(shù)功能:輸出學生信息*/voidprint(stuStru*s,intn){inti,j;if(n>0){printf("%-12s%-12s","準考證號","姓名"); //輸出表頭printf("%-8s%-8s%-8s%-8s%-8s\n","語文","數(shù)學","英語","綜合","總分");printf("----------------------------------------------------\n");for(i=0;i<n;i++,s++){printf("%-12s",s->id); //輸出準考證號printf("%-12s",s->name); //輸出姓名for(j=0;j<4;j++) //輸出成績printf("%-8.2f",s->score[j]);printf("%-8.2f\n",s->total); //輸出總分}}}intmain(){stuStrus[N];intn;
n=input(s); //輸入
sum(s,n); //求和selectSort(s,n); //按總分由高到低排序print(s,n); //輸出return0;}請按下列格式輸入學生信息(行首輸入q結(jié)束輸入):-----------------------------------------------------------------------------準考證號姓名語文數(shù)學英語綜合110100101王曉東112120121230↙110100102李科108130125241↙110100103趙國慶9998101200↙110100104鄒婕121105130250↙110100105楊婷130132128256↙q↙準考證號姓名語文數(shù)學英語綜合總分-----------------------------------------------------------------------------110100105楊婷130.00132.00128.00256.00646.00110100104鄒婕121.00105.00130.00250.00606.00110100102李科108.00130.00125.00241.00604.00110100101王曉東112.00120.00121.00230.00583.00110100103趙國慶99.0098.00101.00200.00498.00動態(tài)數(shù)據(jù)結(jié)構(gòu)
——單鏈表8.68.6動態(tài)數(shù)據(jù)結(jié)構(gòu)——單鏈表數(shù)組要求在內(nèi)存中占用連續(xù)的存儲空間。一方面,當某程序運行時需分配的數(shù)組規(guī)模較大時,常會出現(xiàn)內(nèi)存無法提供滿足程序要求的空閑區(qū)的情況發(fā)生。另一方面,由于數(shù)組在定義時大小固定,當數(shù)據(jù)量超出數(shù)組容量時,不便動態(tài)擴展新的存儲空間。而采用鏈表可以有效解決這一問題,鏈表是線性結(jié)構(gòu)的另一種有效存儲結(jié)構(gòu)。它為線性結(jié)構(gòu)中的各元素獨立地申請存儲空間,并且在每個元素內(nèi)增設(shè)指針來記錄其前驅(qū)或后續(xù)元素的位置。這種結(jié)構(gòu)不要求表中邏輯上相鄰的元素占用物理上相鄰的存儲空間。因此,能提高內(nèi)存空間利用率,同時便動態(tài)擴展。8.6動態(tài)數(shù)據(jù)結(jié)構(gòu)——單鏈表8.6.1單鏈表的定義鏈表首結(jié)點指針結(jié)點結(jié)點值后續(xù)結(jié)點地址8.6.1單鏈表的定義為建立單鏈表,首先需要一個表示表中單個結(jié)點的結(jié)構(gòu)體類型。structnode{ intdata; structnode*next;
};typedefstructnodelinknode;
typedeflinknode*linklist;
屬性域后續(xù)結(jié)點指針結(jié)點類型結(jié)點指針類型可根據(jù)需要擴展屬性域接下來,便可用linknode來聲明結(jié)構(gòu)體變量,用linklist來聲明指向結(jié)構(gòu)體的指針變量。例如:linklisthead=NULL;定義了一個結(jié)構(gòu)體指針,并將其初始化為空,表示初始鏈表head為空表。8.6.1單鏈表的定義8.6.2在單鏈表插入新結(jié)點要在單鏈表中插入值為x的結(jié)點,首先要生成結(jié)點結(jié)構(gòu)體,我們可以定義指針q來指向新生成的結(jié)點空間(q指向的結(jié)點可簡稱為結(jié)點q)。linklistq; //結(jié)點指針生成新結(jié)點,并將待插入數(shù)據(jù)存入結(jié)點的語句為:q=(linklist)malloc(sizeof(linknode)); q->data=x; //假設(shè)x為待存入的數(shù)據(jù)下面討論如何將q指向的結(jié)點插入到單鏈表head中。根據(jù)鏈表狀態(tài)和插入的位置,通常可以分為三種情況:8.6.2在單鏈表插入新結(jié)點原單鏈表head為空表(head==NULL),新加入的結(jié)點成為鏈表的第1個結(jié)點。原鏈表不為空,新結(jié)點q插入在單鏈表的最前面。原鏈表不為空,新結(jié)點q插入到鏈表中由p指向的結(jié)點后面。8.6.3建立單鏈表【例8.6】編寫函數(shù),將鍵盤輸入的整數(shù)序列依次存入初始為空的單鏈表,函數(shù)返回新建單鏈表第一個結(jié)點地址。尾插法建立單鏈表#include<stdio.h>#include<stdlib.h>structnode{intdata;structnode*next;};typedefstructnodelinknode;typedeflinknode*linklist;Linklist.h/*@函數(shù)名稱:creatLink入口參數(shù):無@函數(shù)功能:建立單鏈表,函數(shù)返回單鏈表首結(jié)點地址*/linklistcreatLink(){linklisthead,tail,q;intx;head=tail=NULL; //初始化空鏈表printf("請輸入整數(shù)序列(以空格分隔,以0作為結(jié)束):\n");scanf("%d",&x);while(x!=0){q=(linklist)malloc(sizeof(linknode));//生成新結(jié)點q->data=x;if(head==NULL) //原鏈表為空head=tail=q;else //原鏈表不為空{(diào)tail->next=q;tail=q;} scanf("%d",&x);}if(tail!=NULL) tail->next=NULL;//置鏈表結(jié)束標志returnhead;}#include"linklist.h"intmain(){linklisthead;head=creatLink();return0;}8.6.4單鏈表的遍歷所謂單鏈表的遍歷就是對單鏈表的所有結(jié)點進行一遍訪問?!纠?.7】請在linklist.h中定義函數(shù)voidprint(linklisthead),輸出單鏈表head的所有結(jié)點值。p=head;printf(“%5d”,p->data);p=p->next;/*@函數(shù)名稱:print入口參數(shù):linklisthead@函數(shù)功能:輸出單鏈表內(nèi)容*/voidprint(linklisthead){linklistp=head;printf("List:\n")while(p!=NULL)//當p未遇到鏈表結(jié)束標志時{printf("%5d",p->data); //輸出當前結(jié)點值
p=p->next; //指向下一個結(jié)點}printf("\n");}#include"linklist.h"intmain(){linklisthead;head=creatLink(); //建立單鏈表print(head); //輸出單鏈表return0;}請輸入整數(shù)序列(以空格分隔,以0作為結(jié)束):1020304050600List:1020304050608.6.5在單鏈表中查找結(jié)點在單鏈表中查找結(jié)點可采用順序查找的方法,其查找過程可借助于對單鏈表的遍歷來完成?!纠?.8】編寫函數(shù)linklistsearchLink(linklisthead,intx),在單鏈表head中查找值為x的結(jié)點,若查找成功返回該結(jié)點地址,否則返回NULL?!痉治觥坑靡粋€指針p,從單鏈表的第一個結(jié)點開始,依次向后查找。linklistsearchLink(linklisthead,intx){linklistp=head;while(p!=NULL&&p->data!=x)p=p->next;returnp;}intmain(){linklisthead,p;intx;head=creatLink(); //建立單鏈表print(head); //輸出單鏈表printf("請輸入要查找的結(jié)點值:");scanf("%d",&x);p=searchLink(head,x);if(p!=NULL)printf("查找成功!");elseprintf("查找失??!\n");return0;}8.6.6在單鏈表中刪除結(jié)點在單鏈表中刪除結(jié)點需要知道被刪除結(jié)點前驅(qū)結(jié)點的位置。假設(shè)p指向被刪除結(jié)點,pre指向p的前驅(qū)結(jié)點,則刪除操作分兩種情況:(1)被刪除結(jié)點是單鏈表的第一個結(jié)點(2)被刪除結(jié)點不是單鏈表的第一個結(jié)點(1)被刪除結(jié)點是單鏈表的第一個結(jié)點(2)被刪除結(jié)點不是單鏈表的第一個結(jié)點【例8.9】編寫一個函數(shù)linklistdeleteList(linklisthead,intx),刪除單鏈表head中值為x的結(jié)點。#include"linklist.h"/*@函數(shù)名稱deleteList入口參數(shù):linklisthead,intx@函數(shù)功能:在鏈表head中刪除第一個值為x的結(jié)點@出口參數(shù):返回刪除后的鏈表首結(jié)點地址*/linklistdeleteList(linklisthead,intx){ linklistpre,p; pre=NULL; p=head; while(p!=NULL&&p->data!=x) { pre=p; p=p->next; }if(p) //查找成功{if(pre==NULL) //情況(1):被刪除結(jié)點是鏈表的第一個結(jié)點head=head->next;else//情況(2):被刪除結(jié)點不是鏈表的第一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年哈爾濱市道外區(qū)太平人民醫(yī)院公開招聘編外合同制工作人員6人考試參考試題及答案解析
- 2026徽商銀行客服代表(勞務派遣制)招聘筆試備考試題及答案解析
- 2026貴州農(nóng)商聯(lián)合銀行第一批招聘中層管理人員18人考試備考題庫及答案解析
- 2026湖北省面向北京師范大學普通選調(diào)生招錄考試參考題庫及答案解析
- 中央統(tǒng)戰(zhàn)部直屬事業(yè)單位2026年度應屆高校畢業(yè)生公開招聘考試參考試題及答案解析
- 2026年合肥印象濱湖旅游投資發(fā)展有限公司塘西河公園項目招聘20人筆試備考題庫及答案解析
- 中國科學院西北高原生物研究所2026年支撐崗位招聘1人(青海)考試參考題庫及答案解析
- 2026江西宜春豐城市市屬國企下屬公司招聘24人考試備考試題及答案解析
- 2026中國人壽洛陽分公司(售后部門)招聘售后內(nèi)勤、售后外勤(河南)考試參考試題及答案解析
- 2026備戰(zhàn)中考【地理 常考點鞏固】精練(含答案)
- 裝飾裝修施工應急預案措施
- 食堂廚師培訓方案(3篇)
- 2025年江蘇省南京市事業(yè)單位招聘考試教師招聘體育學科專業(yè)知識試題
- 圍棋學校合作合同協(xié)議
- 產(chǎn)業(yè)招商培訓課件
- 藥品生產(chǎn)成本核算流程
- 《文創(chuàng)產(chǎn)品設(shè)計》 課件 宗誠 第1-3章 根于文化-關(guān)于文創(chuàng)產(chǎn)品- 奇思妙想-文化元素與創(chuàng)業(yè)思維
- 應聘廚師個人簡歷
- 《藥品包裝用卡紙折疊紙盒》(T-CNPPA 2005-2018)
- 內(nèi)蒙古呼和浩特市重點名校2025屆物理高三上期末統(tǒng)考試題含解析
- 籃球館硅PU施工合同
評論
0/150
提交評論