版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C程序設(shè)計(jì)(第二版)
---------------教學(xué)課件制作人:黃熒制作人單位:河師大數(shù)學(xué)與信息科學(xué)學(xué)院第十一章結(jié)構(gòu)體與共用體本章內(nèi)容結(jié)構(gòu)體變量與數(shù)組的定義、引用和初始化(重點(diǎn))結(jié)構(gòu)體變量和數(shù)組做為函數(shù)的參數(shù)
(重點(diǎn))動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)鏈表(難點(diǎn))共用體枚舉類型用typedef定義類型第一部分:結(jié)構(gòu)體部分1)
結(jié)構(gòu)體的概念---與數(shù)組相當(dāng)(只是元素類型可以不同)類型定義變量定義成員引用初始化2)結(jié)構(gòu)體變量數(shù)組定義數(shù)組初始化數(shù)組應(yīng)用實(shí)例3)結(jié)構(gòu)體數(shù)組4)結(jié)構(gòu)體的指針指針定義移動(dòng)法處理數(shù)組成員作參數(shù)變量作參數(shù)指針作參數(shù)數(shù)組作參數(shù)5)結(jié)構(gòu)體作函數(shù)參數(shù)§11.1
結(jié)構(gòu)體概述-----結(jié)構(gòu)體變量的感性認(rèn)識(shí)結(jié)構(gòu)體變量
-----與數(shù)組變量完全類似
共同點(diǎn):結(jié)構(gòu)體同樣是構(gòu)造型的數(shù)據(jù)類型,可以包含多個(gè)”元素”
不同點(diǎn):結(jié)構(gòu)體可以包含一組類型不同的”元素”如:
存儲(chǔ)學(xué)生信息學(xué)生的信息包含:學(xué)號(hào)、姓名,性別、年齡、分?jǐn)?shù)、地址。numnamesexagescore
addr10010李軍M1887.5北京要點(diǎn):結(jié)構(gòu)體和數(shù)組完全類似,也可以包含多個(gè)元素,不過(guò)結(jié)構(gòu)體的“元素”類型可以不同。§11.2
結(jié)構(gòu)體的類型定義與變量定義如,要求構(gòu)造存儲(chǔ)學(xué)生信息的結(jié)構(gòu)體類型。學(xué)生的信息包含:學(xué)號(hào)、姓名,性別、年齡、分?jǐn)?shù)、地址。結(jié)構(gòu)體類型定義的一般形式:struct
[結(jié)構(gòu)體類型名]{
類型標(biāo)識(shí)符成員名;
類型標(biāo)識(shí)符成員名;
…………….};一結(jié)構(gòu)體類型定義:
(--制定“藍(lán)圖”,指出結(jié)構(gòu)體變量中的元素(成員)名和相應(yīng)的類型。struct
student{
intnum;charname[20];charsex;
intage;floatscore;charaddr[30];};再次強(qiáng)調(diào):
student類型和類型名int、float等是“兄弟姐妹”,是用來(lái)說(shuō)明變量的類型的。二結(jié)構(gòu)體變量的定義:--用于定義變量實(shí)體,只有結(jié)構(gòu)體變量實(shí)體才能存儲(chǔ)一組類型不同的數(shù)據(jù)。2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)namenumsexagescoreaddrStu1結(jié)構(gòu)體變量定義的一般形式:
struct
結(jié)構(gòu)體類型名
變量列表;方式1:struct
student
{charnum[10];charname[20];charsex;
intage;floatscore;charaddr[30];};struct
student
stu1,stu2;方式2:(!!!)struct
student
{charnum[10];charname[20];charsex;
intage;floatscore;charaddr[30];}stu1,stu2
;方式3:struct{charnum[10];charname[20];charsex;
intage;floatscore;charaddr[30];}stu1,stu2
;如,已給結(jié)構(gòu)體類型定義:
struct
student{intnum;charname[20];charsex;
intage;floatscore;charaddr[30];};要點(diǎn):結(jié)構(gòu)體變量的成員與數(shù)組元素一樣是可以放數(shù)據(jù)的“簡(jiǎn)單變量”!變量Stu1的6個(gè)成員,共占59個(gè)字節(jié)!相應(yīng)的結(jié)構(gòu)體變量定義為:
struct
student
stu1,stu2;§11.3
結(jié)構(gòu)體變量的引用結(jié)構(gòu)體成員的表示方法:
結(jié)構(gòu)體變量名.成員名
成員(分量)運(yùn)算符優(yōu)先級(jí):1結(jié)合性:從左向右如,已有結(jié)構(gòu)體變量定義:struct
student
stu1;
stu1.num=123;
strcpy(,"lili");stu1.sex='f';
stu1.age=21;stu1.score=98;strcpy(stu1.addr,"xinxiang");例從鍵盤(pán)給一個(gè)結(jié)構(gòu)體變量賦值,并輸出結(jié)構(gòu)體變量中的數(shù)據(jù)#include<stdio.h>voidmain(){struct
student
{charnum[10];
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
}stu;
printf("請(qǐng)輸入此學(xué)生的信息:學(xué)號(hào)s、姓名s、性別c、年齡i、成績(jī)f和住址s\n");
scanf("%s%s
%c%d%f%s",stu.num,,&stu.sex,&stu.age,&stu.score,stu.addr);
printf("\n\tNO.:%s\tname:%s\tsex:%c\n",stu.num,,stu.sex);
printf("\tage:%d\tscore:%.1f\taddress:%s\n\n",stu.age,stu.score,stu.addr);}§11.4
結(jié)構(gòu)體變量的初始化例11.1結(jié)構(gòu)體變量的初始化#include<stdio.h>voidmain()
{
struct
student
{
longnum;
charname[20];
charsex;
charaddr[20];
}a={89031,"LiLin",'M',"148jiansheRoad"};
printf("\n\t\t---學(xué)生情況信息---\n\n");
printf("\tNO.:%ld\tname:%s\n",a.num,);
printf("\tsex:%c\taddress:%s\n\n\t",a.sex,a.addr);}關(guān)于結(jié)構(gòu)體類型和變量的4點(diǎn)說(shuō)明特別注意:區(qū)別結(jié)構(gòu)體類型和結(jié)構(gòu)體變量!!!結(jié)構(gòu)體類型只是對(duì)相應(yīng)的結(jié)構(gòu)體變量進(jìn)行結(jié)構(gòu)上的說(shuō)明,系統(tǒng)不為它分配內(nèi)存。結(jié)構(gòu)體變量才是存儲(chǔ)數(shù)據(jù)的變量實(shí)體,系統(tǒng)將為它分配內(nèi)存。numnamesexageBirthdayaddrmonthdayyear4)結(jié)構(gòu)體中的成員名可以和程序中的變量名相同,二者互不干擾,代表不同的對(duì)象.
如,num=stu.num;如,struct
student
{charnum[10];charname[20];charsex;
intage;floatscore;charaddr[30];}stu1,stu2
;2)結(jié)構(gòu)體中的成員與數(shù)組的元素一樣相當(dāng)于普通變量.3)結(jié)構(gòu)體的成員也可以是一個(gè)結(jié)構(gòu)體變量.(結(jié)構(gòu)體類型的嵌套)如,structdate{intyear;
intmonth;
intday;};structstudent{intnum;charname[20];charsex;
intage;
structdatebirthday;charaddr[30];};structstudentstu1,stu2;關(guān)于結(jié)構(gòu)體變量的引用規(guī)則5點(diǎn)說(shuō)明:1)不能將結(jié)構(gòu)體變量整體輸入輸出
如,printf("%d,%s,%f\n",stu);X
scanf("%d%s%%f",&stu);X
printf("%d,%s,%f\n",stu.num,,stu.score);√
scanf("%d%s%f",&stu.num,,&stu.score);√2)結(jié)構(gòu)體嵌套時(shí)應(yīng)該逐級(jí)引用
如,
stu1.birthday.month=12;3)結(jié)構(gòu)體變量成員可以象普通變量一樣進(jìn)行各種運(yùn)算如,stu1.score=stu2.score;sum=stu1.score+stu2.score;stu1.age++;++stu1.age;4)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址如,scanf("%d",&stu.num);
printf("%d\n",&stu);//輸出stu首地址5)可以將一個(gè)結(jié)構(gòu)體變量整體賦值給另一個(gè)結(jié)構(gòu)體變量//特許證!!!
如:stu2=stu1;
§11.5結(jié)構(gòu)體數(shù)組---與整型數(shù)組沒(méi)兩樣,只是元素復(fù)雜點(diǎn)!??!結(jié)構(gòu)體數(shù)組的每個(gè)元素都是結(jié)構(gòu)體變量一結(jié)構(gòu)體數(shù)組的定義⑴structstudent{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];};structstudentstu[N0];⑵structstudent{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];}
stu[N0];
⑶struct
{intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];}
stu[N0];stu[0]stu[1]stu[2]stu[3]stu[N0-1]...stu一個(gè)元素能放一個(gè)學(xué)生的信息,10個(gè)元素就放十個(gè)學(xué)生的信息。struct{ intnum; charname[20]; charsex;
intage; floatscore; charaddr[30];}stu[3]={
{10101,"李林",'M',18,87.5,"北京路103"},
{10102,"張奮",'M',19,99,"上海路130"},
{10104,"王敏",'F',20,78.5,"中山路1010"}
};二結(jié)構(gòu)體數(shù)組的初始化10101"李林"'M'1887.5"103北京路"10102"張奮"'M'1999"130上海路"注意:可以把每個(gè)元素的大括號(hào)去掉.長(zhǎng)度省略.三結(jié)構(gòu)體數(shù)組的應(yīng)用舉例(下標(biāo)法訪問(wèn)結(jié)構(gòu)體數(shù)組)#include<stdio.h>#include<string.h>#defineN010//定義統(tǒng)計(jì)選票的數(shù)組structperson//提倡全局性結(jié)構(gòu)體類型定義{charname[20];intcount;}leader[3]={"li",0,"gu",0,"fu",0};voidmain(){int
i,j,sum=0;charleaderName[20];//"投票"和統(tǒng)計(jì)票數(shù)
printf("\n\t---%d位選民,共投%d張票,請(qǐng)投票:\n\t",N0,N0);
for(i=1;i<=N0;i++){scanf("%s",leaderName);
for(j=0;j<3;j++)
if(strcmp(leaderName,leader[j].name)==0)
leader[j].count++;}
printf("\n");//輸出結(jié)果
for(i=0;i<3;i++){printf("\t%s\t%d\n",leader[i].name,leader[i].count);
sum+=leader[i].count;}
printf("\n\t廢票%d張。\n\n\t",N0-sum);}算法分析:1統(tǒng)計(jì)選票的變量是結(jié)構(gòu)體放候選人的姓名和票數(shù)2統(tǒng)計(jì)過(guò)程:10個(gè)選民每人”投”一票,和誰(shuí)的名字一樣,誰(shuí)的票數(shù)加1.例11.2
選票的統(tǒng)計(jì)程序:三個(gè)候選人,10個(gè)選民.§11.6指向結(jié)構(gòu)體數(shù)據(jù)的指針一指向結(jié)構(gòu)體的指針變量如,structstudentstu,*p;p=&stu;(*p).num=89101;
stu.num=89101;另外注意到,C規(guī)定:
下面三種形式等價(jià)結(jié)構(gòu)體變量.成員名
(*p).成員名
p->成員名(指向運(yùn)算符)("->":優(yōu)先級(jí)為1!!!)例11.3利用指針?lè)ㄝ敵鲆粋€(gè)結(jié)構(gòu)體變量#include<stdio.h>#include<string.h>#defineFORMAT"\tNo:%ld\tname:%s\tsex:%c\t\tscore:%.2f\n\n"voidmain(){structstudent{longnum;charname[20];charsex;floatscore;};
structstudentstu,*p;p=&stu;
stu.num=89101;//還可以怎么表示?
strcpy(,"LiLi");
stu.sex='m';stu.score=89.5;
printf("\n\t\t---學(xué)生情況信息---\n\n");
printf(FORMAT,stu.num,,stu.sex,stu.score);
printf(FORMAT,(*p).num,(*p).name,(*p).sex,(*p).score);
printf(FORMAT,p->num,p->name,p->sex,p->score);
printf("\n\t");}p->num=89101;練習(xí):分析下列運(yùn)算的含義:p->np->n++++p->n(p->n)++++(p->n)二用指針移動(dòng)法訪問(wèn)結(jié)構(gòu)體數(shù)組stu[0]stu[1]stu[2]stu[3]stu[N0-1]...stu
p->例11.4利用指針移動(dòng)法輸出結(jié)構(gòu)體數(shù)組#include<stdio.h>#defineFORMAT"\t%d\t\t%s\t%c\t%d\n"
structstudent{intnum;charname[20];charsex;
intage;}stu[3]={{10101,"LiLin",'M',18},
{10102,"ZhangFun",'M',19},
{10104,"WangMin",'F',20}};//主函數(shù)voidmain(){
structstudent*p;
printf("\n\t\t---學(xué)生情況信息---\n\n");
printf("\tNo.\t\tName\t\tsex\tage\n\n");
for(p=stu;p<stu+3;p++)
printf(FORMAT,p->num,p->name,p->sex,p->age);
printf("\n\t");}三結(jié)構(gòu)體指針作為函數(shù)參數(shù)P292傳遞結(jié)構(gòu)體變量的值有四種情況:1結(jié)構(gòu)體變量成員作實(shí)參
形參通常是:簡(jiǎn)單變量,值傳遞2結(jié)構(gòu)體變量作實(shí)參
形參通常是:結(jié)構(gòu)體變量,值傳遞
費(fèi)時(shí)費(fèi)內(nèi)存資源,通常不用此方法.可以用指針變量傳遞結(jié)構(gòu)體變量的地址3結(jié)構(gòu)體變量的地址作實(shí)參
形參通常是:結(jié)構(gòu)體指針,地址傳遞4結(jié)構(gòu)體數(shù)組名作實(shí)參
形參通常是:結(jié)構(gòu)體數(shù)組或結(jié)構(gòu)體指針,地址傳遞例11.5處理一個(gè)學(xué)生信息。在主函數(shù)中賦值,在函數(shù)中輸出。
(變量作為實(shí)參:值傳遞)效率低,不提倡。#include<stdio.h>#include<string.h>structstudent{intnum;charname[20];floatscore[3];};voidmain(){voidprint(structstudentstu);//函數(shù)說(shuō)明
structstudentstu;
stu.num=12345;strcpy(,"LiLi");//顯然用賦初值的方法更好
stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.6;
print(stu);}//函數(shù)功能:輸出一個(gè)結(jié)構(gòu)體變量//入口參數(shù):結(jié)構(gòu)體變量(值傳遞!!!)voidprint(structstudent
stu){inti;
printf("\n\t\t---學(xué)生情況信息---\n\n");//下面輸出結(jié)構(gòu)體變量的所有數(shù)據(jù)域
printf("\t%d\t%s:\t",stu.num,);
for(i=0;i<3;i++)printf("%.1f\t",stu.score[i]);
printf("\n\n\t");}例11.6處理一個(gè)學(xué)生信息。在主函數(shù)中賦值,在函數(shù)中輸出。
(改變上一題的參數(shù)類型:地址作為實(shí)參:地址傳遞
)效率較高,提倡。
#include<stdio.h>#include<string.h>structstudent{intnum;charname[20];
floatscore[3];};voidmain(){voidprint(structstudent*p);//函數(shù)說(shuō)明
structstudentstu={12345,"LiLi",67.5,89,78.6};
print(&stu);}//函數(shù)功能:輸出一個(gè)結(jié)構(gòu)體變量//入口參數(shù):結(jié)構(gòu)體變量的地址(用結(jié)構(gòu)體指針變量來(lái)傳遞地址!!!)voidprint(structstudent*p){inti;
printf("\n\t\t---學(xué)生情況信息---\n\n");//下面輸出結(jié)構(gòu)體變量的所有數(shù)據(jù)域
printf("\t%d\t%s:\t",p->num,p->name);
for(i=0;i<3;i++)
printf("%.1f\t",p->score[i]);
printf("\n\n\t");}Ex11.3學(xué)生信息數(shù)組的輸出(用指針移動(dòng)法)#defineN04#include<stdio.h>structstudent{longnum;charname[20];
floatscore[3];
floataver;};/*--------------------------------
函數(shù)功能:輸出一個(gè)結(jié)構(gòu)體數(shù)組的數(shù)據(jù)
入口參數(shù):結(jié)構(gòu)體數(shù)組的首地址和數(shù)組長(zhǎng)度
返回值:無(wú)----------------------------------*/voidoutputa(structstudent*stu,intn){structstudent*p;intj;
printf("\n\t\t---學(xué)生情況信息---\n\n");
printf("\t學(xué)號(hào)\t姓名\tC程序\t數(shù)分\t高代\t平均分?jǐn)?shù)\n\n");//輸出表頭
for(p=stu;p<stu+n;p++) { //循環(huán)體:輸出一個(gè)學(xué)生的信息(stu[i])
printf("\t%ld\t%s\t",p->num,p->name);
for(j=0;j<3;j++) //思考:如果用下標(biāo)法,怎么修改程序?
printf("%.1f\t",p->score[j]);
printf("%.1f\t",p->aver);
printf("\n\n");}}/*--------------------------------
函數(shù)功能:輸入一個(gè)結(jié)構(gòu)體數(shù)組的數(shù)據(jù)并求出三門(mén)課的平均值
入口參數(shù):傳遞結(jié)構(gòu)體數(shù)組的首地址和數(shù)組長(zhǎng)度
返回值:無(wú)----------------------------------*/voidinputa(structstudent*stu,intn){
structstudent*p;intj;
printf("請(qǐng)輸入%d個(gè)學(xué)生的信息:(學(xué)號(hào)L,姓名s和三門(mén)成績(jī)f)\n\t",n);
for(p=stu;p<stu+n;p++)
{ //循環(huán)體:輸入一個(gè)學(xué)生的信息(輸入stu[i])
scanf("%ld%s",&p->num,p->name);
p->aver=0;
for(j=0;j<3;j++){scanf("%f",&p->score[j]);p->aver+=p->score[j];}
p->aver/=3;
}}//--主函數(shù)voidmain(){structstudentstu[N0]={771234,"李立東",75,78,89,0,771235,"王偉",90,95,98,0,771236,"付軍",96,83,92,0,771237,"谷玉",92,94,75,0};//inputa(stu,N0);outputa(stu,N0);}Ex11.4學(xué)生信息數(shù)組的輸入并求出三門(mén)課的平均值
(用指針移動(dòng)法)回顧:結(jié)構(gòu)體相關(guān)的內(nèi)容1)
結(jié)構(gòu)體的概念---與數(shù)組類似(只是元素類型可以不同)類型定義:如,struct
student{int
num;charname[10];…};變量定義:如,structstudentstu;(三種格式)成員引用:(點(diǎn)運(yùn)算)如,gets();初始化2)結(jié)構(gòu)體變量數(shù)組定義:如,structstudentstu[N0];(三種格式)數(shù)組初始化數(shù)組應(yīng)用實(shí)例:數(shù)組的輸入輸出,選票統(tǒng)計(jì)。
for(i=1;i<=N0;i++){
scanf("%s",leaderName);
for(j=0;j<3;j++)if(strcmp(leaderName,leader[j].name)==0)
leader[j].count++;}3)結(jié)構(gòu)體數(shù)組4)結(jié)構(gòu)體的指針指針定義:如,structstudent*p;移動(dòng)法處理數(shù)組:如,for(p=stu;p<stu+N0;p++){輸出*p的成員}
成員作參數(shù):同簡(jiǎn)單變量變量作參數(shù):值傳遞,不提倡。相關(guān)算法:輸出一個(gè)結(jié)構(gòu)體變量指針作參數(shù):地址傳遞:相關(guān)算法:輸出一個(gè)結(jié)構(gòu)體變量,輸出結(jié)構(gòu)體數(shù)組數(shù)組作參數(shù):地址傳遞:相關(guān)算法:輸出結(jié)構(gòu)體數(shù)組,輸入與求平均值
for(p=stu;p<stu+n;p++)
{scanf("%ld%s",&p->num,p->name);
p->aver=0;
for(j=0;j<3;j++){scanf("%f",&p->score[j]);p->aver+=p->score[j];}
p->aver/=3;
}5)結(jié)構(gòu)體作函數(shù)參數(shù)§11.7鏈表--真正意義上的動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu)(實(shí)用、重要)stu[0]stu[1]stu[2]stu[3]stu[N0-1]...stuP->放第一個(gè)結(jié)點(diǎn)的地址ABCD\0T…
head鏈表的特點(diǎn):1與數(shù)組一樣,鏈表能放多個(gè)數(shù)據(jù).2鏈表的"長(zhǎng)度"(結(jié)點(diǎn)個(gè)數(shù))是不固定的.需要放數(shù)據(jù)就建立一個(gè)結(jié)點(diǎn),不需要的數(shù)據(jù)馬上釋放掉,機(jī)動(dòng)靈活,是真正意義上的動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu).3鏈表的"元素"—結(jié)點(diǎn)不是連續(xù)存放的.是"哪有空間就塞哪".東一個(gè)結(jié)點(diǎn),西一個(gè)結(jié)點(diǎn).4鏈表的"元素"—結(jié)點(diǎn)是用指針連接起來(lái)的.鏈表是一串用聯(lián)系指針連起來(lái)的結(jié)點(diǎn)(元素)一鏈表概述鏈表是一串用聯(lián)系指針連起來(lái)的結(jié)點(diǎn)(元素)結(jié)點(diǎn)通常是一個(gè)結(jié)構(gòu)體類型的變量聯(lián)系指針域是放的是下一個(gè)結(jié)點(diǎn)的地址,程序就是通過(guò)它來(lái)依次找到下一個(gè)結(jié)點(diǎn)的鏈表結(jié)點(diǎn)的結(jié)構(gòu)體類型的定義例:放學(xué)生學(xué)號(hào)、姓名、成績(jī)的結(jié)點(diǎn)的類型定義:structstudent{intnum;charname[20];
三個(gè)數(shù)據(jù)域
flaotscore;
structstudent*next;
聯(lián)系指針域}空指針,標(biāo)志著鏈表的尾部放第一個(gè)結(jié)點(diǎn)的地址ABCD\0T…
head頭指針:放第一個(gè)結(jié)點(diǎn)的地址二簡(jiǎn)單鏈表#include<stdio.h>#defineNULL0structstudent//結(jié)點(diǎn)結(jié)構(gòu)體類型{longnum;floatscore;
structstudent*next;};voidmain(){structstudent*head,*p;
structstudent
a,b,c;//==建立鏈表
a.num=99101;a.score=89.5;//給結(jié)點(diǎn)賦值
b.num=99103;b.score=90;
c.num=99107;c.score=85;
head=&a;a.next=&b;//連接結(jié)點(diǎn)
b.next=&c;c.next=NULL;//==輸出鏈表!!!
printf("\n\t三個(gè)結(jié)點(diǎn)數(shù)據(jù)為:\n\n");p=head;do{
printf("\t%ld%5.1f\n\n",p->num,p->score);
p=p->next;
//前進(jìn)指針
}while(p!=NULL);}&aheadABC89.5&b9910190&c9910385\099107例11.7建立并輸出由三個(gè)學(xué)生信息結(jié)點(diǎn)構(gòu)成的鏈表。學(xué)生信息包括:學(xué)號(hào),成績(jī)。算法分析:1)定義鏈表結(jié)點(diǎn)的類型2)建立鏈表:
定義頭指針,建立3個(gè)結(jié)點(diǎn),給3個(gè)結(jié)點(diǎn)賦值,連接3個(gè)結(jié)點(diǎn)。3)輸出鏈表:依次逐個(gè)結(jié)點(diǎn)輸出。三處理動(dòng)態(tài)鏈表所需的函數(shù)1申請(qǐng)空間的兩個(gè)函數(shù):(它們的原型在stdlib.h
和malloc.h中)
1)void*malloc(unsignedsize);←void指針類型
功能:申請(qǐng)size個(gè)字節(jié)的存儲(chǔ)空間返回值:所申請(qǐng)存儲(chǔ)空間的首地址,申請(qǐng)不成功返回NULL.
如:structstudent*p;
len=sizeof(structstudent);
p=(structstudent*)malloc(len);
或:p=(structstudent*)malloc(sizeof(structstudent));
2)void*calloc(unsigned
n,unsignedsize);
功能:申請(qǐng)n個(gè)大小為size字節(jié)的存儲(chǔ)空間返回值:所申請(qǐng)存儲(chǔ)空間的首地址,申請(qǐng)不成功返回NULL.2釋放空間的函數(shù)
free(p);
功能:釋放指針p所指向的結(jié)點(diǎn)所占的空間。四建立動(dòng)態(tài)鏈表ABCD\0T…
head例11.8寫(xiě)一個(gè)函數(shù)建立一個(gè)包含多名學(xué)生信息的單向動(dòng)態(tài)鏈表.
(學(xué)生信息包括學(xué)號(hào)和分?jǐn)?shù).)算法分析:1建立結(jié)點(diǎn)的結(jié)構(gòu)體類型,定義頭指針2構(gòu)造鏈表:
1)建立空鏈表:head=NULL;
2)
為新結(jié)點(diǎn)申請(qǐng)空間:用malloc()函數(shù)
3)
給新結(jié)點(diǎn)的數(shù)據(jù)域賦值
4)
連接新結(jié)點(diǎn)到鏈表尾部
5)重復(fù)2)
3)
4)
直到輸入最后一個(gè)結(jié)點(diǎn)。//3輸出鏈表(下一個(gè)例題)將NULL放入鏈尾結(jié)點(diǎn)的連接指針域建立新結(jié)點(diǎn):(p1指向它)1)為結(jié)點(diǎn)申請(qǐng)空間(malloc())2)輸入學(xué)號(hào)和分?jǐn)?shù)p2=p1;(使得p2指向新的表尾)連接新結(jié)點(diǎn)在鏈尾p2->next=p1;head指向新結(jié)點(diǎn)head=p1;
假真n++;p1->num≠0為第一個(gè)結(jié)點(diǎn)申請(qǐng)空間(malloc())輸入學(xué)號(hào)和分?jǐn)?shù)(p1,p2指向它)head=NULL(建立空鏈表)n==1?例11.8建立鏈表的函數(shù)#include<stdio.h>#include<stdlib.h>#defineNULL0#defineLENsizeof(structstudent)#defineSTUNODE
structstudentSTUNODE//--定義鏈表的結(jié)點(diǎn)類型{longnum;floatscore;STUNODE*next;};intn;//全局變量,放結(jié)點(diǎn)個(gè)數(shù)/*---------------------------
函數(shù)功能:建立學(xué)生信息的鏈表
入口參數(shù):無(wú)
返回值:鏈表的頭指針----------------------------*/STUNODE*create(void)
{STUNODE
*head,*p1,//p1總是指向新結(jié)點(diǎn)*p2;//p2總是指向新表尾
n=0;head=NULL;
p1=p2=(STUNODE*)malloc(LEN);
printf("輸入學(xué)號(hào),分?jǐn)?shù):(學(xué)號(hào)=0是退出.)\n");
scanf("%ld%f",&p1->num,&p1->score);
while(p1->num!=0){n++;
if(n==1)head=p1;//連接新結(jié)點(diǎn)
elsep2->next=p1;
p2=p1;//p2總是指向新表尾
p1=(STUNODE*)malloc(LEN);
scanf("%ld%f",&p1->num,&p1->score);}p2->next=NULL;
return
head;}將NULL放入鏈尾結(jié)點(diǎn)的連接指針域建立新結(jié)點(diǎn):(p1指向它)1)為結(jié)點(diǎn)申請(qǐng)空間(malloc())2)輸入學(xué)號(hào)和分?jǐn)?shù)p2=p1;(使得p2指向新的表尾)連接新結(jié)點(diǎn)在鏈尾p2->next=p1;head指向新結(jié)點(diǎn)head=p1;
假真n++;p1->num≠0為第一個(gè)結(jié)點(diǎn)申請(qǐng)空間(malloc())輸入學(xué)號(hào)和分?jǐn)?shù)(p1,p2指向它)head=NULL(建立空鏈表)n==1?A…
headB\0TC五輸出鏈表ABCD\0T…
headp/*--------------------------------
函數(shù)功能:輸出學(xué)生信息的鏈表
入口參數(shù):鏈表的頭指針
返回值:無(wú)---------------------------------*/voidprint(STUNODE
*head){STUNODE*p;
printf("\n\n\t學(xué)號(hào)\t分?jǐn)?shù)\n");//表頭
p=head;//p從表頭開(kāi)始遍歷表鏈
while(p!=NULL){
printf("\t%ld\t%.1f\n",p->num,p->score);
p=p->next;//前進(jìn)指針
}
printf("\n");}//==主函數(shù)voidmain(){STUNODE*head;head=create();
print(head);}算法思想:1p指向表頭:p=head;2
輸出p所指向的結(jié)點(diǎn):*p3
前進(jìn)指針:p=p->next;4重復(fù)2,3直到p=NULL.p=p->next;//前進(jìn)指針六對(duì)鏈表的刪除操作:(先定位,再刪除.)ABCD\0T…
headp2p1刪除的兩種可能情況:所刪結(jié)點(diǎn)在表頭和不在表頭.①欲刪結(jié)點(diǎn)在表頭(p1==head):②所刪結(jié)點(diǎn)不在表頭(p1≠head):p2->next=p1->next;free(p1);head=p1->next;free(p1);ABCD\0T…
headp1ABCD\0T…
head六對(duì)鏈表的刪除操作:(先定位,再刪除.)ABCD\0T…
headp2p1整體的算法分析:1表為空表(head==NULL):不用刪.2當(dāng)表不空時(shí):a)定位:使p1指向欲刪結(jié)點(diǎn),p2指向它的前一個(gè)結(jié)點(diǎn).
當(dāng)p1所指學(xué)號(hào)不是欲刪學(xué)號(hào)而且后面還有結(jié)點(diǎn)時(shí),同時(shí)前進(jìn)p2p1指針.b)刪除:(兩種可能情況)①欲刪結(jié)點(diǎn)在表頭(p1==head):
head=p1->next;free(p1);②所刪結(jié)點(diǎn)不在表頭(p1≠head):
p2->next=p1->next;free(p1);(p1是鏈尾,也在此情況中。)returnheadreturnhead輸出信息:沒(méi)有找到該學(xué)生的信息當(dāng)p1=head則①
head=p1->next否則,②p2->next=p1->nextfree(p1),n—p1->num=num真假前進(jìn)指針:p2=p1,p1=p1->next(同時(shí)前進(jìn)指針p2p1!!!)p1->num≠num
&&p1->next≠NULLp1=head(定位)head=NULL真假刪除鏈表結(jié)點(diǎn)的函數(shù):/*函數(shù)功能:刪除鏈表中指定學(xué)號(hào)的結(jié)點(diǎn)
入口參數(shù):鏈表的頭指針和指定要?jiǎng)h除的學(xué)號(hào)
返回值:鏈表的頭指針*/STUNODE*del(STUNODE*head,longnum){STUNODE*p1,//p1總指向要?jiǎng)h除的結(jié)點(diǎn)*p2;//p2總指向p1前面的結(jié)點(diǎn)
if(head==NULL){printf("這是一個(gè)空表!\n");returnhead;}//定位:p1=head;
while((num!=p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}//同時(shí)前進(jìn)指針p2p1//刪除
if(num==p1->num)
{if(p1==head)head=p1->next;//情況①表頭
elsep2->next=p1->next;//情況②表中或表尾
free(p1);n--;
printf("%ld
被刪除了.\n",num);}elseprintf("沒(méi)有找到指定學(xué)號(hào):%ld\n",num);returnhead;}
returnheadreturnhead輸出信息:沒(méi)有找到該學(xué)生信息當(dāng)p1=head則①
head=p1->next否則②
p2->next=p1->nextfree(p1),n—p1->num=num真假p2=p1,p1=p1->next(同時(shí)前進(jìn)指針p2p1!!!)p1->num≠num&&p1->next≠NULLp1=headhead=NULL真假七對(duì)鏈表的保序插入操作(從小到大。先定位,后插入)ABCD\0T…
headp2p0p1保序插入有三種可能情況:插到表頭、插到中間和插到表尾.①插到表頭:head=p0;p0->next=p1;p2->next=p0;p0->next=p1;②插到中間:③插到表尾:ABCD\0T…
headp0p1\0p0p1ABCDT…
headp1->next=p0;p0->next=NULL;ABCD\0T…
head思考:如果不用p1該怎么處理?p0->next=head;head=p0;(調(diào)一下次序行嗎?)七對(duì)鏈表的保序插入操作(從小到大。先定位,后插入)整體的算法分析:1表為空表,表頭指針指向新結(jié)點(diǎn)p0:head=p0;p0->next=NULL;2當(dāng)表不空時(shí):a)定位:使得p1指向第一個(gè)學(xué)號(hào)不小于欲插學(xué)號(hào)的結(jié)點(diǎn),p2指向它前面的結(jié)點(diǎn).
當(dāng)p1所指學(xué)號(hào)小于欲插學(xué)號(hào)而且后面還有結(jié)點(diǎn)時(shí),同時(shí)前進(jìn)p2p1指針.b)插入:(三種可能情況)
①
當(dāng)p0要插到表頭(p1==head):head=p0;p0->next=p1;②
當(dāng)新結(jié)點(diǎn)是插到表的中部:p2->next=p0;p0->next=p1;③當(dāng)新結(jié)點(diǎn)是插到表尾:p1->next=p0;p0->next=NULL;ABCD\0T…
headp2p0p1例11.11保序插入給定結(jié)點(diǎn)的函數(shù):/*函數(shù)功能:保序插入給定的結(jié)點(diǎn)
入口參數(shù):
鏈表的頭指針和給定結(jié)點(diǎn)的地址
返回值:鏈表的頭指針*/STUNODE*insert(STUNODE*head,STUNODE*stud){STUNODE*p0,//p0總指向要插入的新結(jié)點(diǎn)*p1,//p1總指向要插入的位置*p2;//p2總指向p1的前一個(gè)結(jié)點(diǎn)
p1=head;p0=stud;
if(head==NULL)//表為空表
{head=p0;p0->next=NULL;}else//表不空:先定位,再插入{while((p1->num<p0->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}//定位
if(p1->num>=p0->num)//插入:3種可能情況
{if(head==p1)head=p0;//可能情況①表頭
else
p2->next=p0;
//可能情況②中部
p0->next=p1;
}else{p1->next=p0;p0->next=NULL;}}//情況③表尾
n++;returnhead;}整體的算法分析:1表為空表,表頭指針指向新結(jié)點(diǎn)p0:head=p0;p0->next=NULL;2當(dāng)表不空時(shí):a)定位:使得p1指向第一個(gè)學(xué)號(hào)不小于指定學(xué)號(hào)的結(jié)點(diǎn),p2指向它前面的結(jié)點(diǎn).
當(dāng)p1所指學(xué)號(hào)小于欲插學(xué)號(hào)而且后面還有結(jié)點(diǎn)時(shí),同時(shí)前進(jìn)p2p1指針
b)插入:(三種可能情況)
①
當(dāng)p0要插到表頭(p1==head):head=p0;p0->next=p1;②
當(dāng)新結(jié)點(diǎn)是插到表的中部:p2->next=p0;p0->next=p1;③當(dāng)新結(jié)點(diǎn)是插到表尾:p1->next=p0;p0->next=NULL;對(duì)鏈表的綜合操作將前邊4個(gè)函數(shù)放在一個(gè)c程序中,再加上一個(gè)主程序就可以實(shí)現(xiàn)對(duì)鏈表的綜合處理:voidmain(){ STUNODE*head,stu; longdel_num;
printf("\n輸入學(xué)生記錄:");
head=create();
print(head);
//--刪除操作
printf("\n輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):");
scanf("%ld",&del_num);
head=del(head,del_num);
print(head);
//--保序插入操作
printf("\n輸入要插入學(xué)生的記錄:\n");
scanf("%ld%f",&stu.num,&stu.score);
head=insert(head,&stu);
print(head);}八對(duì)鏈表的多個(gè)結(jié)點(diǎn)刪除與插入:voidmain(){ STUNODE*head,*stu;
longdel_num;
printf("\n輸入學(xué)生記錄:\n"); head=create();
print(head); //==多個(gè)結(jié)點(diǎn)的刪除
printf("\n輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):");
scanf("%ld",&del_num);
while(del_num!=0) {
head=del(head,del_num);
print(head);
printf("\n輸入要?jiǎng)h除的學(xué)號(hào):");
scanf("%ld",&del_num); }
//==多個(gè)結(jié)點(diǎn)的保序插入printf("\n輸入要插入學(xué)生的記錄:\n");stu=(STUNODE*)malloc(LEN);scanf("%ld%f",&stu->num,&stu->score);while(stu->num!=0){
head=insert(head,stu);
printf("\n輸入要插入學(xué)生的記錄:\n");
stu=(STUNODE*)malloc(LEN);
scanf("%ld%f",&stu->num,&stu->score);}print(head);}作業(yè):(挑戰(zhàn)一下自己?。?編寫(xiě)一個(gè)建立學(xué)生信息(包含學(xué)號(hào)和分?jǐn)?shù))鏈表的程序,包含兩個(gè)函數(shù):
1)建立鏈表的函數(shù):要求在建立鏈表時(shí),將新結(jié)點(diǎn)插到表頭.
2)輸出鏈表的函數(shù)
另外在主函數(shù)中調(diào)用它們.
2ex11.12(逆序,思路與題目1類似)
3把課本上保序插入函數(shù)改寫(xiě)成建立一個(gè)有序鏈表的函數(shù)。
4ex11.11(刪除指定年齡的結(jié)點(diǎn),刪除相同值的多結(jié)點(diǎn)的情況。)
后三題只寫(xiě)函數(shù)加在第一題中運(yùn)行。Ex11.11程序目的是輸入一個(gè)age,刪除鏈表中此年齡相同的所有結(jié)點(diǎn)//Ex11.11程序目的是輸入一個(gè)age,刪除鏈表中此年齡相同的所有結(jié)點(diǎn)STUNODE*del_age(STUNODE*head,intage){STUNODE*p1, //p1總指向要?jiǎng)h的結(jié)點(diǎn)(讓p1遍歷鏈表) *p2; //p2總指向p1前邊的結(jié)點(diǎn)
p1=p2=head;while(p1!=NULL)
if(age!=p1->age){p2=p1;p1=p1->next;} //前進(jìn)指針
else{ if(p1==head) {head=p1->next;free(p1);p1=p2=head;} //p1指向表頭
else {p2->next=p1->next;free(p1);p1=p2->next;}//p1指向中間結(jié)點(diǎn)或p1指向表尾
n--;}returnhead;}Ex程序目的:建立鏈表:從表頭插入鏈表//Ex程序目的:建立鏈表:從表頭插入鏈表。STUNODE*create_bt(){
STUNODE*head=NULL,*p; //p總指向新結(jié)點(diǎn)
p=(STUNODE*)malloc(LEN);
printf("請(qǐng)輸入學(xué)號(hào)和成績(jī):(學(xué)號(hào)=0時(shí),退出。)\n");
scanf("%ld%d",&p->num,&p->score);
while(p->num!=0) //插入p指向的結(jié)點(diǎn)
{
if(head==NULL) { head=p;p->next=NULL; } else
{p->next=head;heat=p;}
p=(STUNODE*)malloc(LEN);
printf("請(qǐng)輸入學(xué)號(hào)和成績(jī):(學(xué)號(hào)=0時(shí),退出。)\n");
scanf("%ld%d",&p->num,&p->score); } returnhead;}Ex11.12
程序目的:逆序鏈表//Ex1112
程序目的:逆序鏈表STUNODE*inv(STUNODE*head){
STUNODE*p1,
//p1總指向剩余結(jié)點(diǎn)鏈表表頭,下一個(gè)連接的結(jié)點(diǎn)
*p0; //p0總指向當(dāng)前準(zhǔn)備連接的那個(gè)結(jié)點(diǎn)
p0=p1=head;
if(head!=NULL&&head->next!=NULL)
//head不是指向空表或單點(diǎn)表,再進(jìn)行逆序操作
while(p1!=NULL) //剩余結(jié)點(diǎn)鏈表還不空
{ p0=p1;
//剩余結(jié)點(diǎn)鏈表的表頭作為當(dāng)前要插入的結(jié)點(diǎn) p1=p1->next;
//前進(jìn)指針p1,指向剩余結(jié)點(diǎn)鏈表的新表頭
//連接p0到head p0->next=head; head=p0; //p1作為新的表頭
}
returnhead;}//Ex程序目的:用保序插入建立有序鏈表(按成績(jī))//Ex程序目的:用保序插入建立有序鏈表(按成績(jī))STUNODE*create_sort(){
STUNODE*head, //新有序表的頭指針 *p0, //p0總指向新結(jié)點(diǎn) *p1, //p1遍歷鏈表,定插入的位置:第一個(gè)成績(jī)不小于新結(jié)點(diǎn)成績(jī)的結(jié)點(diǎn) *p2; //p2總指向插入位置的前邊那個(gè)結(jié)點(diǎn) head=NULL;n=0; p0=(STUNODE*)malloc(LEN);
printf("請(qǐng)輸入學(xué)號(hào)和成績(jī):(學(xué)號(hào)=0時(shí),退出。)\n"); scanf("%ld%d",&p0->num,&p0->score); while((p0->num!=0)) {
n++;
if(n==1)
{head=p0;p0->next=NULL;}
else
{p1=head;
while((p0->score>p1->score)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}//定位
if(p0->score<=p1->score)//插入:3種可能情況
{if(head==p1)head=p0;
//可能情況①
elsep2->next=p0; //可能情況② p0->next=p1;}
else{p1->next=p0;p0->next=NULL;}
//可能情況③
} p0=(STUNODE*)malloc(LEN);
printf("請(qǐng)輸入學(xué)號(hào)和成績(jī):(學(xué)號(hào)=0時(shí),退出。)\n"); scanf("%ld%d",&p0->num,&p0->score); }returnhead;
}§11.8
共用體(也叫聯(lián)合體)union共用體類型名{
類型標(biāo)識(shí)符成員名;
類型標(biāo)識(shí)符成員名;
…………….};如,uniondata{inti;charch;floatf;}a,b,c;…b.ch='a';共用體變量的成員的引用與結(jié)構(gòu)體成員的引用形式上一樣:共用體變量名.成員名共用體類型定義的一般形式:共用體是構(gòu)造數(shù)據(jù)類型---它可以有多個(gè)類型不同的成員它的幾個(gè)不同類型的成員共占同一段內(nèi)存!!!(相互覆蓋)afchi當(dāng)然!sizeof(uniondata)=4關(guān)于共用體類型的幾點(diǎn)說(shuō)明:(1-6)1
共用體類型變量的成員共占同一段內(nèi)存,每一時(shí)刻只能有一個(gè)成員的值存放在其中2最后一次存放共用體成員的值將覆蓋掉其他成員的值
如,a.i=1;a.ch='a';a.f=1.5;3共用體變量和各成員的地址,實(shí)際是同一個(gè)地址4不能對(duì)共用體變量名賦值,不能對(duì)共用體變量初始化
如,①a=1;
X
②m=a;
X
③union{inti;charch;float
f}a={1,'a',1.5};
X5不能把共用體變量作為函數(shù)參數(shù),不能把共用體類型作為函數(shù)返回值類型,但是可以使用指向共用體變量的指針6共用體可以出現(xiàn)在結(jié)構(gòu)體類型中,也可以定義共用體數(shù)組.同樣結(jié)構(gòu)體可以出現(xiàn)在共用體類型中,實(shí)際上結(jié)構(gòu)體和數(shù)組都可以作為共用體的成員.例11.12一個(gè)學(xué)校的選舉登記:其中有學(xué)生和教師(共用體的應(yīng)用)學(xué)生登記信息為:號(hào)碼姓名性別職業(yè)
班級(jí)教師登記信息為:號(hào)碼姓名性別職業(yè)
職務(wù)numnamesexjobclassposition10112086LiWangFMST501profstruct{intnum;charname[10];charsex;
charjob;
union{intClass;charposition[10];}category;}p[2];例11.12一個(gè)學(xué)校的選舉登記:其中有學(xué)生和教師(共用體的應(yīng)用)#include<stdio.h>#defineN02#defineFORMAT"\t%d\t%s\t%c\t%c"struct
{intnum;charname[10];charsex;charjob;
union{intClass;charposition[10];}category;}p[N0];例11.12共用體的應(yīng)用:程序(接上頁(yè)1)voidmain(){inti;
printf("請(qǐng)輸入%d個(gè)人的信息:\n",N0);
printf("學(xué)號(hào)i姓名s性別c工作c:\n");
for(i=0;i<N0;i++)
{
scanf("%d%s
%c%c",&p[i].num,p[i].name,&p[i].sex,
&p[i].job);
if(p[i].job=='s')
{printf("請(qǐng)輸入班級(jí):");
scanf("%d",&p[i].category.Class);
}
elseif(p[i].job=='t')
{printf("請(qǐng)輸入職稱:");
scanf("%s",p[i].category.position);}
else
printf("輸入錯(cuò)誤!\n");
}
printf("\n\t學(xué)號(hào)\t姓名\t性別\t工作\t班級(jí)/職稱:\n");
for(i=0;i<N0;i++){
printf(FORMAT,p[i].num,p[i].name,p[i].sex,p[i].job);
if(p[i].job=='s')printf("\t%d\n",p[i].category.Class);
elseprintf("\t%s\n",p[i].category.position);}
printf("\n");}§11.9枚舉類型只要將所需要的變量值一一列舉出來(lái),便構(gòu)成了一個(gè)枚舉類型。如:一周內(nèi)的日期:(枚舉類型的定義)
enum
weekday{sun,mon,tue,wed,thu,fri,sat};枚舉類型的保留字。enum:enumeration枚舉類型名。枚舉元素,即枚舉變量可以取的值。枚舉元素也稱作枚舉常量。枚舉類型的變量定義:
enumweekdayday;關(guān)于使用枚舉類型變量的幾點(diǎn)注意(1-6)1枚舉元素是作為常量處理,也稱為枚舉常量,不能對(duì)它賦值枚舉常量有它相應(yīng)的整型序號(hào)。如:
#include<stdio.h>voidmain(){ enumweekday{sun,mon,tue,wed,thu,fri,sat};inti;
//5個(gè)枚舉常量的值依次為:0,1,2,3,4,5,6
enumweekdayweekdays[7]={sun,mon,tue,wed,thu,fri,sat};
for(i=0;i<7;i++)printf("%d",weekdays[i]);printf("\n");}3枚舉量的序號(hào)或說(shuō)值是可以改變的.
如:在定義中:enum
weekday{sun=7,mon=1,tue,wed,thu,fri,sat};兩個(gè)枚舉量可以比較,它們之間的比較是其序號(hào)(枚舉量也可以和整型數(shù)據(jù)比較))如:workday=sun;
此時(shí)workday==mon為假,workday>=mon為真5可以通過(guò)枚舉量的序號(hào)給枚舉變量賦值,但需進(jìn)行類型強(qiáng)制轉(zhuǎn)換,不能直接賦整數(shù)如:workday=(enumweekday)1;workday=mon;
但注意:workday=1;是不允許的?。?!6枚舉量不能直接輸出和輸入.例11.13口袋中的彩球取出3個(gè)球的所有排列方法口袋中有紅、黃、藍(lán)、白、黑5種球,每次從口袋中取出3個(gè)球,問(wèn)得到三種不同的球的可能取法有幾種,并打印出每種排列。分析:這類題最簡(jiǎn)單的方法是采用窮舉法.#include<stdio.h>enumcolor{red,yellow,blue,white,black};voidmain(){
int
i,j,k,n=0;//由于VC不允許枚舉變量做++運(yùn)算,所以改成了整型變量
char*name[5]={"red","yellow","blue","white","b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年標(biāo)準(zhǔn)出租車股份買賣協(xié)議模板版
- 2024年二零二四年度電動(dòng)汽車設(shè)計(jì)圖紙合同范本3篇
- 恒溫?zé)崴髡n程設(shè)計(jì)
- 2024年簡(jiǎn)化版二婚無(wú)子雙方自愿離婚合同樣本版B版
- 廣告投放培訓(xùn)課程設(shè)計(jì)
- 2024年水庫(kù)水資源權(quán)益轉(zhuǎn)讓合同
- 2024年度汽車多功能座椅維修與定制服務(wù)合同3篇
- 2024年度設(shè)備租賃與代加工生產(chǎn)協(xié)議帶眉腳
- 2024年度唐山骨瓷品牌品牌形象設(shè)計(jì)合同3篇
- 2024年標(biāo)準(zhǔn)店面轉(zhuǎn)讓協(xié)議模板版B版
- 2024年職業(yè)病危害防治培訓(xùn)試題
- 維修作業(yè)區(qū)修理工上崗試卷+答案
- 譯林新版(2024)七年級(jí)英語(yǔ)上冊(cè)Unit 5 Welcome to the unit課件
- 建筑施工安全檢查標(biāo)準(zhǔn)JGJ59-2011
- 數(shù)控類論文開(kāi)題報(bào)告
- 2024內(nèi)蒙古文物考古研究所招聘歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 農(nóng)村安全飲水工程項(xiàng)目劃分表
- 智聯(lián)國(guó)企行測(cè)筆試真題
- 2025屆新高考物理熱點(diǎn)精準(zhǔn)復(fù)習(xí):高中物理6大模塊計(jì)算題思路總結(jié)
- 2025屆江蘇省期無(wú)錫市天一實(shí)驗(yàn)學(xué)校數(shù)學(xué)七年級(jí)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 城市軌道交通運(yùn)營(yíng)管理【共30張課件】
評(píng)論
0/150
提交評(píng)論