![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)](http://file4.renrendoc.com/view2/M03/35/2E/wKhkFmaIbASAUc7SAAEguiMJ4qg695.jpg)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)](http://file4.renrendoc.com/view2/M03/35/2E/wKhkFmaIbASAUc7SAAEguiMJ4qg6952.jpg)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)](http://file4.renrendoc.com/view2/M03/35/2E/wKhkFmaIbASAUc7SAAEguiMJ4qg6953.jpg)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)](http://file4.renrendoc.com/view2/M03/35/2E/wKhkFmaIbASAUc7SAAEguiMJ4qg6954.jpg)
![數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)](http://file4.renrendoc.com/view2/M03/35/2E/wKhkFmaIbASAUc7SAAEguiMJ4qg6955.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)結(jié)構(gòu)與算法》
試驗(yàn)指導(dǎo)書(shū)
2022年8月
目錄
試驗(yàn)一C語(yǔ)言編程復(fù)習(xí)1
試驗(yàn)二線形表基本操作的實(shí)現(xiàn)5
試驗(yàn)三棧和隊(duì)列基本操作的實(shí)現(xiàn)及應(yīng)用14
試驗(yàn)四二叉樹(shù)算法的實(shí)現(xiàn)24
試驗(yàn)五圖的算法的實(shí)現(xiàn)36
試驗(yàn)六查找算法的實(shí)現(xiàn)52
試驗(yàn)七排序算法的實(shí)現(xiàn)62
試驗(yàn)一C語(yǔ)言編程復(fù)習(xí)
一、試驗(yàn)?zāi)康?/p>
1.熟識(shí)C語(yǔ)言的上機(jī)環(huán)境,進(jìn)一步把握C語(yǔ)言的結(jié)構(gòu)特點(diǎn)。
2.理解指針與應(yīng)用的區(qū)分。
3.把握結(jié)構(gòu)體的使用。
4.把握簡(jiǎn)潔排序方法。
二、試驗(yàn)內(nèi)容
(1)輸入一行字符,計(jì)算該行字符中包含多少個(gè)單詞,單詞之間用空格
分隔開(kāi)。
(2)采用add函數(shù)求兩個(gè)復(fù)數(shù)2+3i和4+5i的和。(要求用結(jié)構(gòu)體來(lái)定義
復(fù)數(shù))
(3)一個(gè)班上有30名同學(xué),每個(gè)同學(xué)的數(shù)據(jù)作為一個(gè)紀(jì)錄,每個(gè)紀(jì)錄包
括學(xué)號(hào)、姓名、三門(mén)課程的成果和三門(mén)課程平均成果。從鍵盤(pán)輸入
同學(xué)的學(xué)號(hào)、姓名及三門(mén)課的成果。要求打印三門(mén)課程平均成果最
高分的同學(xué)紀(jì)錄。
三、試驗(yàn)步驟
(1)用數(shù)組或字符串獵取字符,遇到空格即表示新單詞的開(kāi)頭。
(2)要求用結(jié)構(gòu)體來(lái)定義復(fù)數(shù),包括實(shí)部和虛部。
(3)定義一個(gè)Student的結(jié)構(gòu)體類(lèi)型,包含學(xué)號(hào)、姓名、成果等成員。
四、實(shí)現(xiàn)提示
structstudent
{charnum[6];
stringname;
floatscore[3];
floataver;
);
五、思索與提高
思索為何voidSwap1(Student,Student)這個(gè)函數(shù)無(wú)法實(shí)現(xiàn)兩個(gè)同學(xué)的交
換?
六、完整參考程序
1、
#include<iostream>
#include<string>
usingnamespacestd;
voidmainO
(
cout?!ㄝ斎雗個(gè)單詞,單詞之間用空格隔開(kāi)〃<lndl;
stringstr;
getline(cin,str);
intnum=0;
intlen=str.size();
if(len!=0)num=l;
for(inti=0;i<len;i++)
if(str[i]=='')
(
num++;
)
)
cout<<〃單詞個(gè)數(shù)為:〃〈<num〈〈6ndl;
)
也可使用數(shù)組實(shí)現(xiàn):
^include<iostream>
usingnamespacestd;
voidmainO
(
cout<<〃輸入n個(gè)單詞,單詞之間用空格隔開(kāi)〃Gendl;
charstr[100];
cin>>str;
intnum=0;
for(inti=0;str[i]!='\0';i++)
(
if(str[i]=,f)
(
num++;
)
}
cout<〈〃單詞個(gè)數(shù)為:〃《num<<endl;
)
2、
#include<iostream>
usingnamespacestd;
structcomplex
{
floatreal;
floatimag;
};一
complexadd(complexxl,complexx2)
(
complexsum;
sum.real=xl.real+x2.real;
sum.imag=xl.imag+x2.imag;
returnsum;
voidmain()
(
complexx1={2,3},x2={4,5},sum;
complexadd(complexxl,complexx2);
sum=add(xl,x2);
cout?ux1="?xl.real?"+,,?xl.imag?nin?n
n?nx2=n?x2.real?',+',?x2.imag?,,i',?endl;
cout?nx1+x2=',?sum.real?n4-,,?sum.imag?',i,,?endl;
)
3、
#include<iostream>
#include<string>
#include<iomanip>
usingnamespacestd;
constintn=3;
structstudent
{charnum[6];
stringname;
floatscore[3];
floataver;
);
intmain()
{intij,maxi,max,sum;
floataverage;
studentstudfn];
for(i=0;i<n;i++)〃輸入同學(xué)和成果信息
{cout?"inputscoresofstudentn?i+l?endl;
cout?"number:H;
cin?stud[i].num;
cout?"name:";
cin?stud[i].name;
for(j=O;j<3;j++)
{cout?nscoren?j+l?n:n;
cin?stud[i].score[j];
)
cout?endl;
)〃輸入同學(xué)和成果信息
average=0;
max=0;
maxi=0;
for(i=0;i<n;i++)
{sum=0;
for(j=0;j<3;j++)〃計(jì)算每個(gè)同學(xué)總成果
sum+=stud[i].score[j];
studfi].aver=sum/3.0;//計(jì)算每個(gè)同學(xué)平均成果
if(sum>max)〃將某同學(xué)平均成果與目前的最高平均成果進(jìn)行比較
選擇高的那個(gè)為最新最高平均成果
{max=sum;
maxi=i;
cout?"score1score2score3average"?endl;
for(i=0;i<n;i++)〃輸出全部同學(xué)成果信息
{cout?setw(8)?stud[i].num?H"?setw(10)?stud[i].name?n”;
for(j=0;j<3;j++)
cout<vsetw(3)?stud[i].score[jkv"”;
cout?stud[i].aver?endl;}〃輸出全部同學(xué)成果信息
cout?nThehighestscoreis:n?stud[maxi].num?n,K?stud[maxi].name?n,
n?nTheaverageis:"?stud[maxi].aver;
cout?",threescores:n;〃輸出最高平均成果的同學(xué)信息
for(j=0;j<3;j++)
cout?stud[maxi].score[j]?nn;
cout?endl;
return0;
試驗(yàn)二線形表基本操作的實(shí)現(xiàn)
一、試驗(yàn)?zāi)康?/p>
1.熟識(shí)C語(yǔ)言的上機(jī)環(huán)境,進(jìn)一步把握C語(yǔ)言的結(jié)構(gòu)特點(diǎn)。
2.把握線性表的挨次存儲(chǔ)結(jié)構(gòu)的定義及C語(yǔ)言實(shí)現(xiàn)。
3.把握線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表的定義及C語(yǔ)言實(shí)現(xiàn)。
4.把握線性表在挨次存儲(chǔ)結(jié)構(gòu)即挨次表中的各種基本操作。
5.把握線性表在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表中的各種基本操作。
二、試驗(yàn)內(nèi)容
1.挨次線性表的建立、插入及刪除。
2.鏈?zhǔn)骄€性表的建立、插入及刪除。
三、試驗(yàn)步驟
1.建立含n個(gè)數(shù)據(jù)元素的挨次表并輸出該表中各元素的值及挨次表的長(zhǎng)
度。
2.采用前面的試驗(yàn)先建立一個(gè)挨次表L=[21,23,14,5,56,17,31},
然后在第i個(gè)位置插入元素68o
3.建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表,結(jié)點(diǎn)的值域?yàn)檎蛿?shù)據(jù)。栗求將用戶輸入
的數(shù)據(jù)按尾插入法來(lái)建立相應(yīng)單鏈表。
四、實(shí)現(xiàn)提示
1.由于C語(yǔ)言的數(shù)組類(lèi)型也有隨機(jī)存取的特點(diǎn),一維數(shù)組的機(jī)內(nèi)表示就
是挨次結(jié)構(gòu)。因此,可用C語(yǔ)言的一維數(shù)組實(shí)現(xiàn)線性表的挨次存儲(chǔ)。
在此,我們采用C語(yǔ)言的結(jié)構(gòu)體類(lèi)型定義挨次表:
#defineMAXSIZE1024
typedefintelemtype;/*線性表中存放整型元素*/
typedefstruct
{elemtypevecfMAXSIZE];
intlen;/*挨次表的長(zhǎng)度*/
}sequenlist;
將此結(jié)構(gòu)定義放在一個(gè)頭文件sqlist.h里,可避開(kāi)在后面的參考程序中代
碼重復(fù)書(shū)寫(xiě),此外在該頭文件里給出挨次表的建立及常量的定義。
2.留意如何取到第i個(gè)元素,在插入過(guò)程中留意溢出狀況以及數(shù)組的下
標(biāo)與位序(挨次表中元素的次序)的區(qū)分。
3.單鏈表的結(jié)點(diǎn)結(jié)構(gòu)除數(shù)據(jù)域外,還含有一個(gè)指針域。用C語(yǔ)言描述結(jié)
點(diǎn)結(jié)構(gòu)如下:
typedefintelemtype;
typedefstructnode
{elemtypedata;〃數(shù)據(jù)域
structnode*next;〃指針域
}linklist;
留意結(jié)點(diǎn)的建立方法及構(gòu)造新結(jié)點(diǎn)時(shí)指針的變化。構(gòu)造一個(gè)結(jié)點(diǎn)需用到C
語(yǔ)言的標(biāo)準(zhǔn)函數(shù)malloc(),如給指針變量p安排一個(gè)結(jié)點(diǎn)的地址:
p=(linklist*)malloc(siz60f(linklist));該語(yǔ)句的功能是申請(qǐng)安排一個(gè)類(lèi)型為
linklist的結(jié)點(diǎn)的地址空間,并將首地址存入指針變量p中。當(dāng)結(jié)點(diǎn)不需要時(shí)
可以用標(biāo)準(zhǔn)函數(shù)free(p)釋放結(jié)點(diǎn)存儲(chǔ)空間,這時(shí)p為空值(NULL)。
五、思索與提高
1.假如按由表尾至表頭的次序輸入數(shù)據(jù)元素,應(yīng)如何建立挨次表。
2.在main函數(shù)里假如去掉L二&a語(yǔ)句,會(huì)消失什么結(jié)果?
六、完整參考程序
#include<stdio.h>
#include<conio.h>
#defineMAX30〃定義線性表的最大長(zhǎng)度
enumBOOL{False,True);〃定義BOOL型
typedefstruct{
charelem[MAX];〃線性表
intlast;//last指示當(dāng)前線性表的長(zhǎng)度
Jsqlist;
voidinitial(sqlist&);〃初始化線性表
BOOLinsert(sqlist&,int,char);〃在線性表中插入元素
BOOLdel(sqlist&Jnt,char&);//在線性表中刪除元素
intlocate(sqlist,char);〃在線性表中定位元素
voidprint(sqlist);〃顯示線性表中全部元素
voidmain()
{sqlistS;//S為一線性表
intloc,flag=l;
charj,ch;
BOOLtemp;
printff本程序用來(lái)實(shí)現(xiàn)挨次結(jié)構(gòu)的線性表。\nn);
printf("可以實(shí)現(xiàn)查找、插入、刪除等操作。\n");
initial(S);〃初始化線性表
while(flag)
{printf("請(qǐng)選擇:\n");
printf("1.顯示全部元素5”);
printf(”2.插入一個(gè)元素\n");
printf("3.刪除一個(gè)元素\n");
printf("4.查找一個(gè)元素曲”);
printf("5.退出程序\nn);
scanf(M%c'\&j);
switch(j)
{case*r:print(S);break;//顯示全部元素
case2:{printf(”請(qǐng)輸入要插入的元素(一個(gè)字符)和插入位置:\n");
printf(”格式:字符,位置;例如:a,2\n");
scanf("%c,%dH,&ch,&loc);〃輸入要插入的元素和插入的位置
temp=insert(S,loc,ch);〃插入
if(temp==False)printf("插入失敗八n");〃插入失敗
else{printf("插入勝利!\n");print(S);}〃插入勝利
break;
)
case3:{printf("請(qǐng)輸入要?jiǎng)h除元素的位置蜜
scanf("%d",&loc);〃輸入要?jiǎng)h除的元素的位置
temp=del(S,loc,ch);〃刪J除
if(temp==True)printf(”刪除了一個(gè)元素:%c\n”,ch);//刪除勝利
elseprintf(“該元素不存在!\n");〃刪除失敗
print(S);
break;
)
case'4':{printf("請(qǐng)輸入要查找的元素:");
scanf("%c",&ch);〃輸入要查找的元素
loc=locate(S,ch);//定位
if(loc!=-l)printf("該元素所在位置:%d\n",loc+l);//顯示該元素位置
elseprintf("%c不存在!\n",ch);〃當(dāng)前元素不存在
break;
)
default:flag=O;printf("程序結(jié)束,按任意鍵退出!\n");
)
)
getch();
voidinitial(sqlist&v)
{〃初始化線性表
inti;
printf(”請(qǐng)輸入初始線性表長(zhǎng)度:n=)〃輸入線性表初始化時(shí)的長(zhǎng)度
scanf(u%d",&v.last);
printf(”請(qǐng)輸入從1到%(1的各元素(字符),例如:abcdefgW”,v.last);
getchar();
for(i=0;i<v.last;i++)scanf(H%cn,&v.elem[i]);//輸入線性表的各元素
}
BOOLinsert(sqlist&v,intloc,charch)
{//插入一個(gè)元素,勝利返回True,失敗返回False
inti;
if((loc<l)||(loc>v.last+1))
{printf("插入位置不合理!\n");〃位置不合理
returnFalse;
)
elseif(v.last>=MAX)〃線性表已滿
{printf("線性表已滿!\n");
returnFalse;
)
else{for(i=v.last-l;i>=loc-l;i—)v.elem[i+1J=v.elem[iJ;〃其后元素依次后移
v.elem[loc-l]=ch;〃插入元素
v.last++;〃線性表長(zhǎng)度加一
returnTrue;
)
)
BOOLdel(sqlist&v,intloc,char&ch)
{//刪除一個(gè)元素,勝利返回True,并用ch返回該元素值,失敗返回False
intj;
if(loc<l||loc>v.last)〃刪除位置不合理
returnFalse;
else{ch=v.elem[loc-l];//ch取得該元素值
for(j=loc-1;j<v.last-l;j++)v.elem[jj=v.elem[j+1];〃其后元素依次前移
v.last—;〃線性表長(zhǎng)度減一
returnTrue;
)
)
intlocate(sqlistv,charch)
{〃在線性表中查找ch的位置,勝利返回其位置,失敗返回-I
inti=0;
while(i<v.last&&v.elem[i]!=ch)i++;〃當(dāng)前位置后移,直到找到為止
if(v.elem[i]==ch)//找到當(dāng)前元素
returni;
elsereturn(-l);
)
voidprint(sqlistv)〃顯示當(dāng)前線性表全部元素
{inti;
for(i=0;i<v.last;i++)printf(n%cn,v.elem[i]);
printf(,'\n,');
)
2.鏈?zhǔn)骄€性表的建立、插入及刪除。
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#defineLENsizeof(LNode)//定義LEN為一個(gè)節(jié)點(diǎn)的長(zhǎng)度
enumBOOL{False,True};〃定義BOOL型
typedefstructnode
{chardata;〃數(shù)據(jù)域
structnode*next;〃指向下一個(gè)節(jié)點(diǎn)的指針
}LNode,*LinkList;
voidCreatList(LinkList&,int);〃生成一個(gè)單鏈表
BOOLListInsert(LinkList&,int,char);//在單鏈表中插入一個(gè)元素
BOOLListDelete(LinkList&,int,char&);〃在單鏈表中刪除一個(gè)元素
BOOLListFind_keyword(LinkList,char,int&);//按關(guān)鍵字查找一個(gè)元素
BOOLListFind__order(LinkList,char&,int);〃按序號(hào)查找一個(gè)元素
voidListPrint(LinkList);//顯示單鏈表全部元素
voidmain()
{LinkListL;
BOOLtemp;
intnum,loc,flag=l;
charj,ch;
printf("本程序?qū)崿F(xiàn)鏈?zhǔn)浇Y(jié)構(gòu)的線性表的操作。\nn);
printf("可以進(jìn)行插入,刪除,定位,查找等操作。\n");
printf(”請(qǐng)輸入初始時(shí)鏈表長(zhǎng)度:");//輸入生成單鏈表時(shí)的元素個(gè)數(shù)
scanf("%d",&num);
CreatList(L,num);〃生成單鏈表
ListPrint(L);
while(flag)
{printf("請(qǐng)選擇:\n)
printf("l.顯示全部元素\n");〃顯示鏈表元素
printf("2.插入一個(gè)元素\n");〃插入鏈表元素
printf("3.刪除一個(gè)元素\n");〃刪除鏈表元素
printf("4.按關(guān)鍵字查找元素\n");//按關(guān)鍵字查找
printf(”5.按序號(hào)查找元素\n");//按序號(hào)查找
printf("6.退出程序\n");〃退出
scanf(n%c”,&j);
switch(j)
{case'r:ListPrint(L);break;
case2:{printf("請(qǐng)輸入元素(一個(gè)字符)和要插入的位置:\n”);
printf(”格式:字符,位置;例如:a,3\n");
scanf("%c,%d",&ch,&loc);〃輸入要插入的元素和耍插入的位置
temp=ListInsert(L,loc,ch);//插入
if(temp==False)printf("插入失敗!\n");〃插入失敗
elseprintf("插入勝利!\n");//勝利插入
ListPrint(L);
break;
)
case3:printf("請(qǐng)輸入要?jiǎng)h除的元素所在位置
scanf(n%d",&loc);〃輸入要?jiǎng)h除的節(jié)點(diǎn)的位置
temp=ListDelete(L,loc,ch);〃刪除
if(temp==False)printf("刪除失敗!\n)〃刪除失敗
elseprintf("勝利刪除了一個(gè)元素:%c\n”,ch);〃刪除勝利,顯示該元素
ListPrint(L);
break;
case,4,:if(L->next==NULL)〃鏈表為空
printf("鏈表為空!\n");
else{printf("請(qǐng)輸入要查找的元素(一個(gè)字符):");
scanf(n%c",&ch);〃輸入要查找的元素
temp=ListFind_keyword(L,ch,loc);//按關(guān)鍵字查找
if(temp==False)printf("沒(méi)有找到該元素!\n");〃查找失敗
elseprintf("該元素在鏈表的第%(1個(gè)位置。\n'\loc);
//勝利查找,顯示該元素位置
)
break;
case,5,:if(L->next==NULL)〃鏈表為空
primf("鏈表為空!\n”);
else{primf("請(qǐng)輸入要查找的位置
scanf("%d",&loc);〃輸入要查找的元素的位置
temp=ListFind_order(L,ch,loc);〃按序號(hào)查找
if(temp==False)printf("該位置不存在!\n");〃查找失敗
elseprintf("第%d個(gè)元素是:%c\nH,loc,ch);
//勝利查找,顯示該元素
break;
default:flag=O;printf("程序結(jié)束,按任意鍵退出!\n");
)
}
getch();
}
voidCreatList(LinkList&v,intn)
{〃生成一個(gè)帶頭結(jié)點(diǎn)的有n個(gè)元素的單鏈表
inti;
LinkListp;
v二(LinkLisl)malloc(LEN);〃生成頭結(jié)點(diǎn)
v->next=NULL;
printf("請(qǐng)輸入%d個(gè)字符:例如:abcdefg\n",n);
getchar();
for(i=n;i>0;-i)
{p=(LinkList)malloc(LEN);〃生成新結(jié)點(diǎn)
scanf(n%cn,&p->data);
p->next=v->next;
v->next=p;
}
)
BOOLListInsert(LinkList&v,inti,chare)
{//在單鏈表的第i各位置插入元素e,勝利返回True,失敗返回False
LinkListp,s;
intj=O;
p=v;
while(p&&j<i-l){p=p->next;++j;)〃查找第i-1個(gè)元素的位置
if(!plU>i-l)returnFalse;〃沒(méi)有找到
s=(LinkList)malloc(LEN);〃生成一個(gè)新結(jié)點(diǎn)
s->data=e;
s->next=p->next;〃將新結(jié)點(diǎn)插入到單鏈表中
p->next=s;
returnTrue;
)
BOOLListDelete(LinkList&v,inti,char&e)
{〃在單鏈表中刪除第i個(gè)元素,勝利刪除返回True,并用e返回該元素值,失敗返回False
LinkListp,q;
intj=O;
p=v;
while(p->next&&j<i-1)//查找第i-1個(gè)元素位置
{p=p->next;++j;}
if(!(p->next)||j>i-l)returnFalse;〃查找失敗
q=p->next;p->next=q->next;〃刪除該元素
e=q->data;//e取得該元素值
free(q);〃釋放該元素空間
returnTrue;
)
BOOLListFind_keyword(LinkListv,chare,int&i)
{〃在單鏈表中查找關(guān)鍵字為e的元素,勝利返回True,并用i返回該元素位置,
〃失敗返回False
i=l;
LinkListp;
p=v->next;
while((p->data!=e)&&(p->next!=NULL))//p指針指向下一個(gè),直到
{p=p->next;i++;}〃找到或到鏈表尾為止
if(p->data!=e)〃該元素在鏈表中不存在
returnFalse;
elsereturnTrue;
)
BOOLListFind_order(LinkListv,char&e,inti)
{〃在單鏈表中查找第i個(gè)元素,勝利返回True,并用e返回該元素值,
〃失敗返回False
LinkListp;
intj=0;
P=v;
while(p->next&&j<i)//移動(dòng)指針,直到找到第i個(gè)元素
{p=p->next;++j;}
if(j!=i)returnFalse;〃查找失敗
else{e=p->data;〃查找勝利,用e取得該元素值
returnTrue;
}
)
voidListPrint(LinkListv)
{〃顯示鏈表全部元素
LinkListq;
q=v->next;
printf("鏈表全部元素
while(q!=NULL)
{printf("%c,\q->data);q=q->next;}
printf(n\n");
試驗(yàn)三棧和隊(duì)列基本操作的實(shí)現(xiàn)及應(yīng)用
一、試驗(yàn)?zāi)康?/p>
1.把握棧的挨次表示和實(shí)現(xiàn)
2.把握隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)
二、試驗(yàn)內(nèi)容
1.編寫(xiě)一個(gè)程序?qū)崿F(xiàn)挨次棧的各種基本運(yùn)算。
2.實(shí)現(xiàn)隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)。
三、試驗(yàn)步驟
1.初始化挨次棧
2.插入元素
3.刪除棧頂元素
4.取棧頂元素
5.遍歷挨次棧
6.置空挨次棧
7.初始化并建立鏈隊(duì)列
8.入鏈隊(duì)列
9.出鏈隊(duì)列
10.遍歷鏈隊(duì)列
四、實(shí)現(xiàn)提示
1./*定義挨次棧的存儲(chǔ)結(jié)構(gòu)*/
typedefstruct{
ElemTypestack[MAXNUM];
inttop;
}SqStack;
/*初始化挨次棧函數(shù)列
voidInitStack(SqStack*p)
{q=(SqStack*)manoc(sizeof(SqStack)/*申請(qǐng)空間*/)
/*入棧函數(shù)號(hào)
voidPush(SqStack*p,ElemTypex)
{if(p->top<MAXNUM-l)
{p->top=p->top+1;/*棧頂+1*/
p->stackfp->top]=x;}/*數(shù)據(jù)入棧*/
)
/*出棧函數(shù)*/
ElemTypePop(SqStack*p)
{x=p->stack[p->top];/*將棧頂元素賦給x*/
p->top=p->top-l;}/*棧頂-1*/
/*獵取棧頂元素函數(shù)刃
ElemTypeGetTop(SqStack*p)
{x=p->stackfp->top];}
/*遍歷挨次棧函數(shù)刃
voidOutStack(SqStack*p)
{for(i=p->top;i>=0;i-)
printf("第%d個(gè)數(shù)據(jù)元素是:%6d\nn,i,p->stack[i]);}
/*置空挨次棧函數(shù)*/
voidsetEmpty(SqStack*p)
{p->top=-l;}
2./*定義鏈隊(duì)列*/
typedefstructQnode
{ElemTypedata;
structQnode*next;
JQnodetype;
typedefstruct
{Qnodetype*front;
Qnodetype*rear;
JLqueue;
/*初始化并建立鏈隊(duì)列函數(shù)*/
voidcreat(Lqueue*q)
{h=(Qnodetype*)malloc(sizeof(Qnodetype));/*初始化申請(qǐng)空間*/
h->next=NULL;
q->front=h;
q->rear=h;
for(i=l;i<=n;i++)*采用循環(huán)快速輸入數(shù)據(jù)*/
{scanf("%dn,&x);
Lappend(q,x);}/*采用入鏈隊(duì)列函數(shù)快速輸入數(shù)據(jù)*/
)
/*入鏈隊(duì)列函數(shù)*/
voidLappend(Lqueue*q,intx)
{s->data=x;
s->next=NULL;
q->rear->next=s;
q->rear=s;}
/*出鏈隊(duì)列函數(shù)*/
ElemTypeLdelete(Lqueue*q)
{p=q->front->next;
q->front->next=p->next;
if(p->next==NULL)
q->rear=q->front;
x=p->data;
free(p);}/*釋放空間*/
/*遍歷鏈隊(duì)列函數(shù)*/
voiddisplay(Lqueue*q)
{while(p!=NULL)/*采用條件推斷是否到隊(duì)尾*/
{printf(n%d—>",p->data);
p=p->next;
)
)
五、思索與提高
1.讀棧頂元素的算法與退棧頂元素的算法有何區(qū)分?
2.假如一個(gè)程序中要用到兩個(gè)棧,為了不發(fā)生上溢錯(cuò)誤,就必需給每個(gè)
棧預(yù)先安排一個(gè)足夠大的存儲(chǔ)空間。若每個(gè)棧都預(yù)安排過(guò)大的存儲(chǔ)空間,勢(shì)
必會(huì)造成系統(tǒng)空間緊急。如何解決這個(gè)問(wèn)題?
(1)鏈棧只有一個(gè)top指針,對(duì)于鏈隊(duì)列,為什么要設(shè)計(jì)一個(gè)頭指針和
一個(gè)尾指針?
(2)一個(gè)程序中假如要用到兩個(gè)棧時(shí),可通過(guò)兩個(gè)棧共享一維數(shù)組來(lái)實(shí)
現(xiàn)。即雙向棧共享鄰接空間。假如一個(gè)程序中要用到兩個(gè)隊(duì)列,能否實(shí)現(xiàn)?
如何實(shí)現(xiàn)?
六、完整參考程序
1.棧的挨次表示和實(shí)現(xiàn)
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintSElemType;
//---棧的挨次存儲(chǔ)表示—-
#defineSTACKJNIT.SIZE100
#defineSTACKINCREMENT10
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack&S);
StatusDestroyStack(SqStack&S);
StatusStackDisplay(SqStack&S);
StatusGetTop(SqStackS,SElemType&e);
StatusPush(SqStack&S,SElemTypee);
StatusPop(SqStack&S,SElemType&e);
StatusStackEmpty(SqStackS);
StatusInitStack(SqStack&S){〃構(gòu)造一個(gè)空棧S
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);〃存儲(chǔ)安排失效
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}//InitStack
StatusDestroyStack(SqStack&S){〃銷(xiāo)毀棧S
if(S.base)free(S.base);
S.top=S.base=NULL;
returnOK;
}//InitStack
StatusStackDisplay(SqStack&S){〃顯示棧S
SElemType*p=S.base;
inti=0;
if(S.base==S.top){
printf(”堆棧已空!\n");
returnOK;
)
while(p<S.top)
printf("[%d:%d]",++i,*p++);
printf("\n”);
returnOK;
}//StackDisplay
StatusGetTop(SqStackS,SElemType&e){
〃若棧不空,則用e返回S的棧頂元素,
〃并返回OK;否則返回ERROR
if(S.top==S.base)returnERROR;
e=*(S.top-l);
returnOK;
}//GetTop
StatusPush(SqStack&S,SElemTypee){〃插入元素e為新的棧頂元素
if(S.top-S.base>=S.stacksize){〃棧滿,追加存儲(chǔ)空間
S.base=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);〃存儲(chǔ)安*非失貝攵
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
)
*S.top++=e;
returnOK;
}//Push
StatusPop(SqStack&S,SElemType&e){
〃若棧不為空,則刪除S的棧頂元素,
〃用e返回其值,并返回OK;否則返回ERROR
if(S.top==S.base)returnERROR;
e=*—S.top;
returnOK;
}//Pop
StatusStackEmpty(SqStackS){
〃若S為空棧,則返回TRUE,否則返回FALSE。
if(S.top==S.base)returnTRUE;
elsereturnFALSE;
)//StackEmpty
voidmain(){
SqStackSt;
Statustemp;
intflag=I,ch;
inte;
printf("本程序?qū)崿F(xiàn)挨次結(jié)構(gòu)的堆棧的操作。\nu);
printf("可以進(jìn)行入棧,出棧,取棧頂元素等操作。\nn);
InitStack(St);〃初始化堆棧St
while(flag){
printf("請(qǐng)選擇:\n");
printf("l.顯示棧中全部元素W");
printf(”2.入棧\n");
printf("3.出棧
printf(”4.取棧頂元素W”);
printf(”5.退出程序
scanf("%d”,&ch);
switch(ch){
case1:
StackDisplay(St);
break;
case2:
printf(”請(qǐng)輸入要入棧的元素(一個(gè)整數(shù)):");
scanf(u%d",&e);〃輸入要入棧的元素
temp=Push(St,e);〃入棧
if(temp!=OK)printf("堆棧已滿!入棧失敗!\n”);
else{
printf("勝利入棧!\n)〃勝利入棧
StackDisplay(St);
)
break;
case3:
temp=Pop(St,e);〃出棧
if(temp==ERROR)printf("堆棧巳空!\nu);
else{
printf("勝利出棧一個(gè)元素:%d\n”,e);〃勝利出棧
StackDisplay(St);
}
break;
case4:
temp二GetTop(St,e);〃取得棧頂元素
if(temp==ERROR)printf(”堆棧已空!\nH);
elseprinlf("棧頂元素是:%d\n”,e);〃顯示棧頂元素
break;
default:
flag=O;
printf("程序結(jié)束,按任意鍵退出!\n");
getch();
DestroyStack(St);
2.隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
//Status是函數(shù)的類(lèi)型,其值是函數(shù)結(jié)果狀態(tài)代碼
typedefintStatus;
//ElemType是挨次表數(shù)據(jù)元素類(lèi)型,此程序定義為int型
typedefintQElemType;
//—-單鏈隊(duì)列-隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)--
typedefstructQNode{〃定義結(jié)點(diǎn)結(jié)構(gòu)
QElemTypedata;〃數(shù)據(jù)域
structQNode*next;//指針域
}QNode,*QueuePlr;
typedefstructlinkqueue{〃定義隊(duì)列結(jié)構(gòu)
QueuePtrfront;〃隊(duì)頭指針
QueuePtrrear;〃隊(duì)尾指針
)LinkQueue;
StatusInitLinkQueue(LinkQueue&);〃初始化一個(gè)隊(duì)列
StatusDestroyLinkQueue(LinkQueue&);〃銷(xiāo)毀一個(gè)隊(duì)列
intLinkQueueLength(LinkQueue&Q);〃隊(duì)列的長(zhǎng)度
StatusEnLinkQueue(LinkQueue&,QElemType);〃將一個(gè)元素入隊(duì)列
StatusDeLinkQueue(LinkQueue&,QElemType&);〃將一個(gè)元素出隊(duì)列
StatusDisplayLinkQueue(LinkQueue);〃顯示隊(duì)列中全部元素
voidmain(){
LinkQueueLQ;
QElemTypee;
intflag=l,ch,len;
Statustemp;
printfC,本程序?qū)崿F(xiàn)鏈?zhǔn)浇Y(jié)構(gòu)隊(duì)列的操作。\nn);
printf("可以進(jìn)行入隊(duì)列、出隊(duì)列等操作。\nM);
InitLinkQueue(LQ);〃初始化隊(duì)列
while(flag){
printf("請(qǐng)選擇:\n");
printf(M1.顯示隊(duì)列全部元素\n”);
printf(”2.入隊(duì)列\(zhòng)n");
printf(”3.出隊(duì)列\(zhòng)n");
printf(”4.求隊(duì)列的長(zhǎng)度\n”);
printf(”5.退出程序\n");
scanf("%d”,&ch);
switch(ch){
case1:DisplayLinkQueue(LQ);〃顯示隊(duì)列中全部元素
break;
case2:prinlf("請(qǐng)輸入要人隊(duì)的元素(一個(gè)整數(shù)):");
scanf("%dn,&e);〃輸入要入隊(duì)列的字符
EnLinkQueue(LQ,e);〃入隊(duì)列
DisplayLinkQueue(LQ);
break;
case3:temp=DeLinkQueue(LQ,e);〃出隊(duì)列
if(temp==OK){
printf(”出隊(duì)一個(gè)元素:%d\n”,e);
DisplayLinkQueue(LQ);
)
elseprintf("隊(duì)列為空!\n");
break;
case4:len=LinkQueueLength(LQ);
printf("隊(duì)列的長(zhǎng)度為:%d\nn,len);
break;
default:flag=O;
printf("程序運(yùn)行結(jié)束,按任意鍵退出!\n)
getch();
StatusInitLinkQueue(LinkQueue&Q){〃隊(duì)列初始化
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));〃生成一個(gè)頭結(jié)點(diǎn),并把首尾
指針指向頭結(jié)點(diǎn)
Q.front->next=NULL;
returnOK;
}
StatusDestroyLinkQueue(LinkQueue&Q){〃銷(xiāo)毀一個(gè)隊(duì)列
QueuePtrp;
QElemTypee;
while(Q.front!=Q.rear)
DeLinkQueue(Q,e);
free(Q.front);
Q.front=Q.rear=NULL;
returnOK;
)
intLinkQueueLength(LinkQueue&Q){〃隊(duì)列的長(zhǎng)度
inti=0;
QueuePtrp=Q.front;
while(p!=Q.rear){
++i;
p=p->next;
)
returni;
)
StatusEnLinkQueue(LinkQueue&Q,QElemTypee){〃入隊(duì)列
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));〃生成一個(gè)新結(jié)點(diǎn)
p->data=e;//賦值
p->next=NULL;
Q.rear->next=p;〃插入至隊(duì)列尾
Q.rear=p;〃修改隊(duì)尾指針
returnOK;
StatusDeLinkQueue(LinkQueue&Q,QElemType&e){〃出隊(duì)歹“
QueuePtrp;
if(Q.front==Q.rear)returnERROR;〃推斷隊(duì)列是否已空,已空返回ERROR
p=Q.front->next;〃p指向隊(duì)列中第一個(gè)元素
e=p->data;//取得該元素值
Q.front->next=p->next;〃修改隊(duì)首指針
if(Q.rear==p)Q.rear=Q.front;〃若隊(duì)列已空,把隊(duì)尾指針指向頭結(jié)點(diǎn)
returnOK;〃勝利出隊(duì)列,返回0K
StatusDisplayLinkQueue(LinkQueueQ){〃顯示隊(duì)列中全部元素
QueuePtrp;
inti=0;
p=Q.front->next;
if(p==NULL)printf("隊(duì)列為空隊(duì)列為空
else{
while(p){〃否則顯示隊(duì)列中全部元素
printf(,'[%d:%d]*',++i,p->data);
p=p->next;
)
printf(n\n");
)
returnOK;
)
試驗(yàn)四二叉樹(shù)算法的實(shí)現(xiàn)
一、試驗(yàn)?zāi)康?/p>
1.通過(guò)試驗(yàn),把握二叉樹(shù)的建立與存儲(chǔ)
2.通過(guò)試驗(yàn),把握二叉樹(shù)的遍歷方法
二、試驗(yàn)內(nèi)容
1.練習(xí)二叉樹(shù)的建立與存儲(chǔ)
2.練習(xí)二叉樹(shù)的遍歷
三、試驗(yàn)步驟
1.建立自己的頭文件BT.H,內(nèi)容包括二叉鏈表的結(jié)構(gòu)描述、二叉樹(shù)的
建立、二叉樹(shù)的先序、中序與后序遍歷算法。
2.建立二叉樹(shù),并通過(guò)調(diào)用函數(shù),,輸出先序遍歷、中序遍歷與后序遍歷
的結(jié)果。
四、實(shí)現(xiàn)提示
建立二叉樹(shù)的代碼如下:
BTCHINALR*createbt()
{BTCHINALR*q;
structnodel*s[30];
intj,i,x;
printf("建立二叉樹(shù),輸入結(jié)點(diǎn)對(duì)應(yīng)的編號(hào)和值,編號(hào)和值之間用逗號(hào)
隔開(kāi)\n\n”);
printf("i,x=");
scanf("%d,%c",&i,&x);
while(i!=0&&x!='$')
{q=(BTCHINALR*)malloc(sizeof(BTCHINALR));/*建立一個(gè)
新結(jié)點(diǎn)q*/
q->data=x;q->lchild=NULL;q->rchild=NULL;
s[i]=q;/*q新結(jié)點(diǎn)地址存入s指針數(shù)組中*/
if(i!=1)/*i=l,對(duì)應(yīng)的結(jié)點(diǎn)是根結(jié)點(diǎn)*/
{j=i/2;/*求雙親結(jié)點(diǎn)的編號(hào)j*/
if(i%2==0)s[j]->lchild=q;/*q結(jié)點(diǎn)編號(hào)為偶數(shù)則掛在雙親結(jié)
點(diǎn)j的左邊*/
elses[j]->rchild=q;}/*q結(jié)點(diǎn)編號(hào)為奇數(shù)則掛在雙親結(jié)點(diǎn)j
的右邊*/
printf("i,x=");
scanf("%d,%c",&i,&x);}
returns[l];/*返回根結(jié)點(diǎn)地址*/
)
五、思索與提高
1.如何用孩子兄弟表示法存儲(chǔ)樹(shù)?
2.熟識(shí)及難赫夫曼樹(shù)。
六、完整參考程序
1.二叉樹(shù)的建立、存儲(chǔ)與遍歷
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dos.h>
#include<conio.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
//Status是函數(shù)的類(lèi)型,其值是函數(shù)結(jié)果狀態(tài)代碼
typedefintStatus;
//TElemType是二叉樹(shù)數(shù)據(jù)元素類(lèi)型,此程序定義為char型
typedefcharTElemType;
//----二叉樹(shù)的二叉鏈表存儲(chǔ)表示--一
typedefstructBiTNode{//定義二叉樹(shù)結(jié)點(diǎn)結(jié)構(gòu)
TElemTypedata;〃數(shù)據(jù)域
structBiTNode*lchild,*rchild;〃左右孩子指針域
}BiTNode,*BiTree;
StatusCreateBiTree(BiTree&T);〃生成一個(gè)二叉樹(shù)(可用兩種方法輸入)
StatusCreateBiTreeInPreOrderResult(BiTree&T);〃生成一個(gè)二叉樹(shù)(先序遍歷
結(jié)果輸入)
StatusCreateBiTreeInBracket(BiTree&T);〃生成一個(gè)二叉樹(shù)(嵌套括號(hào)法輸入)
StatusPrintElement(BiTreet);
StatusPreOrderTraverse(BiTreeT,Status(*Visit)(BiTreet));〃先序遞歸遍歷二叉
樹(shù)
StatusInOrderTraverse(BiTreeT,Status(*Visit)(BiTreet));〃中序遞歸遍歷二
叉樹(shù)
StatusPostOrderTraverse(BiTreeT,Status(*Visit)(BiTree。);〃后序遞歸遍歷二
叉樹(shù)
char*pstr;
StatusCreateBiTree(BiTree&T){〃生成一個(gè)二叉樹(shù)(可用兩種方法輸入)
inti,len,choice=0;
charstr[200];
printf("請(qǐng)選擇建立二叉樹(shù)的方法:\n");
printf("l.按先序遍歷的結(jié)果輸入二叉樹(shù)\n");
printf("2.按嵌套括號(hào)表示法輸入二叉樹(shù)\n");
do{
gets(str);
choice=atoi(str);
}while(choice<l||choice>2);
if(choice==l){
printf("請(qǐng)輸入先序遍歷二叉樹(shù)的結(jié)果,程序據(jù)此建立二叉樹(shù)。\n");
printf("對(duì)于葉子結(jié)點(diǎn)以空格表示。\n");
printf("例如:abc_de_g_f__(回車(chē)),建立如下二叉樹(shù):\n");
printf("a\n");
printf("/\n");
printf("b\n");
printf("/\\\n");
printf("cd\n");
printf("/\\\n");
printf("ef\n");
printf("\\\n");
printf("g\n");
pstr=gets(str);
len=strlen(str);
for(i=len;i<180;++i)
str[i]='
strfi]=O;
CreateBiTreelnPreOrderResult(T);//初始化二叉樹(shù)
else{
printf("請(qǐng)輸入嵌套括號(hào)表示法表示的二叉樹(shù),程序據(jù)此建立二叉樹(shù)。\nM);
printf("例如:(a(b(c,d(e(,g),f))))(回車(chē)),建立如下二叉樹(shù):\nn);
printf("a\n");
printf("/\n");
printf("b\n");
printf("/\\\n");
printf("cd\n");
printf("/\\\n");
printf("ef\n");
printf("\\\n");
printf("g'n");
pstr=gets(str);
CreateBiTreelnBracket(T);//初始化二叉樹(shù)
returnOK;
)
StatusCreateBiTreeInPreOrderResult(BiTree&T){
〃依據(jù)存放在字符串*str中的光序遍歷二叉樹(shù)的結(jié)果,生成鏈接存儲(chǔ)的二叉樹(shù)。
〃(若某結(jié)點(diǎn)無(wú)左孩子或右孩子,則以空格表示其“孩子
if(!(*pstr)||*pstr=-*){
T=NULL;
pstr++;
}
else{
T=(BiTNode*)malloc(sizeof(BiTNode));〃生成一個(gè)新結(jié)點(diǎn)
if(!T)exit(OVERFLOW);
T->data=*(pstr++);
CreateBiTreeInPreOrderResult(T->lchild);〃生成左子樹(shù)
CreateBiTreeInPreOrderResult(T->rchild);//生成右子樹(shù)
)
returnOK;
)
StatusCreateBiTreeInBracket(BiTree&T){
〃依據(jù)嵌套括號(hào)表示法的字符串*str生成鏈接存儲(chǔ)的二叉樹(shù)
//例如:*pstr="(a(b(c),d(e(,f),g)))”
BiTreestackfl00],p;
inttop=0,k;//top為棧指針,k指定是左還是右孩子;
T=NULL;
while(*pstr){
switch(*pstr){
caseV:stack[top++]=p;k=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 七臺(tái)河立體車(chē)庫(kù)項(xiàng)目申請(qǐng)報(bào)告
- 中國(guó)造紙制品行業(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 福建部分學(xué)校教學(xué)聯(lián)盟2025年高二2月開(kāi)學(xué)聯(lián)考數(shù)學(xué)試題
- 不貸款的申請(qǐng)書(shū)
- 二零二五年度租房中介費(fèi)智能合約應(yīng)用協(xié)議
- 2025年度保密信息處理中心服務(wù)合同范本
- 2025年度商鋪轉(zhuǎn)租及租賃合同續(xù)簽及調(diào)整合同
- 貧困申請(qǐng)書(shū)模版
- 2025年度茶飲品牌全國(guó)市場(chǎng)開(kāi)發(fā)代理合同
- 再審民事抗訴申請(qǐng)書(shū)
- 河南省鄭州市十校聯(lián)考2024-2025學(xué)年高二上學(xué)期11月期中考試語(yǔ)文試題
- 妊娠期肝內(nèi)膽汁淤積癥臨床診治和管理指南(2024版)解讀課件
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期期末 地理試題(含答案)
- 招聘專(zhuān)職人員報(bào)名表
- 《感冒中醫(yī)治療》課件
- 牛津上海版小學(xué)英語(yǔ)四年級(jí)下冊(cè)(英語(yǔ)單詞表)
- 2024年體育賽事運(yùn)動(dòng)員贊助合同3篇
- 2023年中考英語(yǔ)話題復(fù)習(xí)課件 健康與飲食
- 2023年機(jī)動(dòng)車(chē)檢測(cè)站質(zhì)量手冊(cè)和程序文件(根據(jù)補(bǔ)充要求編制)
- 路遙介紹課件
- 腸道健康管理
評(píng)論
0/150
提交評(píng)論