第一篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)課教案
授課教案
(2016—2017學(xué)年度第一學(xué)期)
課程名稱: 課程編碼: 總學(xué)時(shí): 課程類別:
任課教師: 開課單位: 職稱: 授課專業(yè): 授課班級(jí):
數(shù)據(jù)結(jié)構(gòu) B13040009A 總學(xué)分: 專業(yè)課 李素若 計(jì)算機(jī)工程學(xué)院
教授 計(jì)算機(jī)科學(xué)與技術(shù)
2015級(jí)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)1、2班 授課進(jìn)度第3周,第6次課(2學(xué)時(shí))授課題目
(教學(xué)章、節(jié)實(shí)驗(yàn)一線性表的順序存儲(chǔ)結(jié)構(gòu) 或主題)
授課日期
016年9月14日(9 2
月13日)
.掌握線性表順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn):邏輯上相鄰的數(shù)據(jù)元素其物理位置上也相鄰。1 2.掌握線性表順序存儲(chǔ)結(jié)構(gòu)的插入、刪除操作特點(diǎn)移動(dòng)操作。
教學(xué)
目標(biāo)
1.線性表的順序存儲(chǔ)特點(diǎn)
教學(xué) 2.線性表的順序存儲(chǔ)的基本算法 重點(diǎn)
1.線性表的順序存儲(chǔ)的基本算法
教學(xué) 難點(diǎn)
請(qǐng)選擇你授課時(shí)所采用的教學(xué)方法(在括號(hào)中畫“√”):
講授法﹝﹞,討論法﹝﹞,演示法﹝﹞,案例法﹝﹞,發(fā)現(xiàn)法﹝﹞,探究法﹝﹞,教學(xué)
談話法﹝﹞,實(shí)驗(yàn)法﹝√﹞,參觀法﹝﹞,考察法﹝﹞,自學(xué)輔導(dǎo)法﹝﹞,練習(xí)
方法
法(習(xí)題或操作課)﹝√﹞,讀書指導(dǎo)法﹝﹞,聽說法﹝﹞,寫生法﹝﹞,視唱 法﹝﹞,工序法(技能課)﹝﹞,實(shí)習(xí)作業(yè)法﹝﹞,其他﹝﹞ 教學(xué)
實(shí)物﹝﹞,多媒體﹝﹞,投影﹝﹞,影像﹝﹞,CAI課件﹝﹞,PPT﹝√﹞,標(biāo)本
手段
﹝﹞,掛圖﹝﹞,模型﹝﹞,其他﹝﹞ 討 論、思考 題、作業(yè)
[ 1]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu).北京:中國(guó)水利水電出版社,2014.[ 2]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu)習(xí)題集及上機(jī)指導(dǎo).北京:中國(guó)水利水 請(qǐng)選擇你授課時(shí)所采用的教學(xué)手段(在括號(hào)中畫“√”):
參考
電出版社,2014.文獻(xiàn)
教學(xué)過程及內(nèi)容
一、實(shí)驗(yàn)內(nèi)容
.輸入一組整型元素序列,建立順序表。1 2 .遍歷該順序表。3 .在該順序表中進(jìn)行順序查找某一元素,查找成功返回1,否則返回0。.實(shí)現(xiàn)把該表中所有奇數(shù)排在偶數(shù)之前,即表的前面為奇數(shù),后面為偶數(shù)。4 .判斷該順序表中元素是否對(duì)稱,對(duì)稱返回1,否則返回0。5 .輸入整型元素序列利用有序表插入算法建立一個(gè)有序表。6 .利用實(shí)驗(yàn)6建立兩個(gè)遞增有序表并把它們合并成一個(gè)遞增有序表。7
二、實(shí)驗(yàn)指導(dǎo)
1.參考程序?yàn)椋?/p>
voidCreateSqList(SqList*L){ intn,i? do{ printf(“請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù):”)?
scanf(“%d”,&n)?
if(n<=0)printf(“輸入錯(cuò)誤n”)? } while(n<=0)? for(i=0?i
} 2 .參考程序?yàn)椋?/p>
voidPrintList(SqListL){ inti?
for(i=0?i intFindelems(SqListL,ElemTypee){ inti? for(i=0?i return0? } 4.分析:從順序表表頭開始掃描,當(dāng)數(shù)據(jù)元素為偶數(shù)時(shí)就從該數(shù)開始往后查找,一旦 — 1— 教學(xué)過程及內(nèi)容 找到奇數(shù),則將該偶數(shù)與此奇數(shù)交換。順序表中所有數(shù)據(jù)全部掃描結(jié)束后,所有奇數(shù)就排列 在表的前端。參考程序?yàn)椋?/p> voidChangeVal(SqList*L){ inti,j,temp? for(i=0?i if(L->elem[j]%2!=0){ temp=L->elem[i]? L->elem[i]=L->elem[j]? L->elem[j]=temp? break? } } if(j==L->length)break? } } } 5.參考程序?yàn)椋?/p> intYesNo_Symmetry(SqListL){ inti,j? j=L.length-1? for(i=0?i return0? } return1? } 6 .參考程序?yàn)椋?/p> voidInsert_OrderList(SqList*L,intx){ inti,j? for(i=0?i — 2— 教學(xué)過程及內(nèi)容 L->elem[j+1]=L->elem[j]? L->elem[i]=x? L->length++? } voidCreate_OrderList(SqList*L){ intn,i,input? do{ printf(“請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù):”)? scanf(“%d”,&n)? if(n<=0)printf(“輸入錯(cuò)誤n”)? while(n<=0)? } for(i=0?i Insert_OrderList(L,input)? } } 7 .參考程序?yàn)椋?/p> SqList*Merge_OrderList(SqListA,SqListB)//將有序順序表A和B合并到有序順序表C中返回 { inti=0,j=0,k=0? SqList*C=(SqList*)malloc(sizeof(SqList))? C->length=0? while(j C->elem[i++]=A.elem[j++]? else C->elem[i++]=B.elem[k++]? } if(j==A.length) while(k } — 3— 授課進(jìn)度第4周,第8次課(2學(xué)時(shí))授課題目 (教學(xué)章、節(jié)實(shí)驗(yàn)二單向鏈表 或主題) 授課日期 016年9月21日(9 2 月20日) .掌握線性鏈表的操作特點(diǎn),即指針是邏輯關(guān)系的映像。1 .掌握動(dòng)態(tài)產(chǎn)生單鏈表的方法。2 3 .熟練掌握單鏈表的插入、刪除操作特點(diǎn),即指針賦值的先后次序。 教學(xué) 目標(biāo) 1.掌握動(dòng)態(tài)產(chǎn)生單鏈表的方法。 教學(xué) 2.熟練掌握單鏈表的插入、刪除操作特點(diǎn),即指針賦值的先后次序。重點(diǎn) 1.熟練掌握單鏈表的插入、刪除操作特點(diǎn),即指針賦值的先后次序。 教學(xué) 難點(diǎn) 請(qǐng)選擇你授課時(shí)所采用的教學(xué)方法(在括號(hào)中畫“√”): 講授法﹝﹞,討論法﹝﹞,演示法﹝﹞,案例法﹝﹞,發(fā)現(xiàn)法﹝﹞,探究法﹝﹞,教學(xué) 談話法﹝﹞,實(shí)驗(yàn)法﹝√﹞,參觀法﹝﹞,考察法﹝﹞,自學(xué)輔導(dǎo)法﹝﹞,練習(xí) 方法 法(習(xí)題或操作課)﹝√﹞,讀書指導(dǎo)法﹝﹞,聽說法﹝﹞,寫生法﹝﹞,視唱 法﹝﹞,工序法(技能課)﹝﹞,實(shí)習(xí)作業(yè)法﹝﹞,其他﹝﹞ 教學(xué) 實(shí)物﹝﹞,多媒體﹝﹞,投影﹝﹞,影像﹝﹞,CAI課件﹝﹞,PPT﹝√﹞,標(biāo)本 手段 ﹝﹞,掛圖﹝﹞,模型﹝﹞,其他﹝﹞ 討 論、思考 題、作業(yè) [ 1]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu).北京:中國(guó)水利水電出版社,2014.[ 2]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu)習(xí)題集及上機(jī)指導(dǎo).北京:中國(guó)水利水 請(qǐng)選擇你授課時(shí)所采用的教學(xué)手段(在括號(hào)中畫“√”): 參考 電出版社,2014.文獻(xiàn) 教學(xué)過程及內(nèi)容 一、實(shí)驗(yàn)內(nèi)容 .隨機(jī)產(chǎn)生或鍵盤輸入一組元素,建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表(無序)。1 .遍歷單向鏈表。2 3 .把單向鏈表中元素逆置(不允許申請(qǐng)新的結(jié)點(diǎn)空間)。.在單向鏈表中刪除所有的偶數(shù)元素結(jié)點(diǎn)。4 5 .編寫在非遞減有序鏈表中插入一個(gè)元素使鏈表元素仍有序的函數(shù),并利用該函數(shù)建 立一個(gè)非遞減有序單向鏈表。 .利用實(shí)驗(yàn)5建立兩個(gè)遞增有序單向鏈表,然后合并成一個(gè)遞增鏈表。6 7 .利用實(shí)驗(yàn)1建立的鏈表,實(shí)現(xiàn)將其分解成兩個(gè)鏈表,其中一個(gè)全部為奇數(shù),另一個(gè) 全部為偶數(shù)(盡量利用已知的存儲(chǔ)空間)。 二、實(shí)驗(yàn)指導(dǎo) 1.參考程序?yàn)椋?/p> LinkListCreateListH(void)//頭插法產(chǎn)生帶頭結(jié)點(diǎn)單鏈表 { intch? LinkListhead=(LinkList)malloc(sizeof(LNode))? LinkLists? head->next=NULL? while(scanf(“%d”,&ch)==1)//輸入數(shù)據(jù)類型錯(cuò)誤時(shí)結(jié)束單鏈表的生成 { s=(LinkList)malloc(sizeof(LNode))? s->data=ch? s->next=head->next? head->next=s? } returnhead? } LinkListCreateListRand(void)//利用隨機(jī)函數(shù)產(chǎn)生帶頭結(jié)點(diǎn)單鏈表(頭插法){ intch,i? LinkListhead=(LinkList)malloc(sizeof(LNode))? LinkLists? head->next=NULL? srand((unsigned)time(NULL))? printf(“PleaseinputCreateNnmbers:”)? scanf(“%d”,&ch)? for(i=0?i s->data=rand()%50?//隨機(jī)產(chǎn)生0~49之間的數(shù) — 1— 教學(xué)過程及內(nèi)容 s->next=head->next? head->next=s? } returnhead? } 2 .參考程序?yàn)椋?/p> voidPrintLinkList(LNodeL){ LinkListp? p=L.next? while(p){ printf(“%d”,p->data)? p=p->next? } printf(“n”)? } 3.參考程序?yàn)椋?/p> voidInverse_set(LinkListhead){ LNode*r,*m=NULL,*p? p=head->next? while(p!=NULL){ r=m?m=p? p=p->next? m->next=r? } head->next=m? } 4.參考程序?yàn)椋?/p> voidDelEvenLinkList(LinkListhead){ LinkListq,p? p=head->next? q=head? while(p){ if(p->data%2==0){ q->next=p->next? free(p)? — 2— 教學(xué)過程及內(nèi)容 p=q->next? } else { q=p? p=p->next? } } } 5 .參考程序?yàn)椋?/p> voidInsertIncr(LinkListhead,ElemTypex)//將結(jié)點(diǎn)插入遞增的單鏈表 { LinkListq,p,s? s=(LinkList)malloc(sizeof(LNode))? s->data=x? q=head? p=head->next? while(p&&p->data p=p->next? } s->next=q->next? q->next=s? } LinkListCreateListIncr(void)//通過調(diào)用插入有序鏈表函數(shù)生成遞增單鏈表 { intch? LinkListhead=(LinkList)malloc(sizeof(LNode))? LinkLists? head->next=NULL? while(scanf(“%d”,&ch)==1)//輸入數(shù)據(jù)類型錯(cuò)誤時(shí)結(jié)束單鏈表的生成 InsertIncr(head,ch)? returnhead? } 6 .參考程序?yàn)椋?/p> LinkListLinkListCat(LinkListhead1,LinkListhead2){ LinkListh1,h2,h? LinkListhead=(LinkList)malloc(sizeof(LNode))? head->next=NULL? — 3— 教學(xué)過程及內(nèi)容 h1=head1->next? h2=head2->next? h=head? while(h1&&h2){ if(h1->data h1=h1->next? } else { h->next=h2? h=h->next? h2=h2->next? } } if(h1)h->next=h1? if(h2)h->next=h2? returnhead? } 7 .參考程序?yàn)椋?# include voidPrintLinkList(LNodeL){ LinkListp? p=L.next? while(p){ printf(“%d”,p->data)? p=p->next? — 4— 教學(xué)過程及內(nèi)容 } printf(“n”)? } voidDecoLinkList(LNodehead,LinkListhead1,LinkListhead2)//將單鏈表head拆分奇數(shù)鏈head1和偶數(shù)鏈head2 { LinkListh,h1,h2? h=head.next? h1=head1? h2=head2? while(h){ if(h->data%2==0){ h2->next=h? h=h->next? h2=h2->next? } else { h1->next=h? h=h->next? h1=h1->next? } } h1->next=NULL? h2->next=NULL? } main(){ LinkListhead? LinkListhead1=(LinkList)malloc(sizeof(LNode))? LinkListhead2=(LinkList)malloc(sizeof(LNode))? head=CreateListIncr()? PrintLinkList(*head)? DecoLinkList(*head,head1,head2)? PrintLinkList(*head1)? PrintLinkList(*head2)? } — 5— 授課進(jìn)度第5周,第10次課(2學(xué)時(shí))授課題目 (教學(xué)章、節(jié)實(shí)驗(yàn)三棧的存儲(chǔ)及基本運(yùn)算 或主題) 授課日期 016年9月28日(9 2 月27日) .掌握棧這種數(shù)據(jù)結(jié)構(gòu)特性及其主要存儲(chǔ)結(jié)構(gòu),并能在現(xiàn)實(shí)生活中靈活運(yùn)用。1 2.了解和掌握遞歸程序設(shè)計(jì)的基本原理和方法。 教學(xué) 目標(biāo) .掌握棧的兩種存儲(chǔ)結(jié)構(gòu) 1.棧的基本運(yùn)算 教學(xué) 2.了解棧在遞歸函數(shù)中的作用 重點(diǎn) 3.掌握棧的兩種存儲(chǔ)結(jié)構(gòu) 1 教學(xué) 2.棧的基本運(yùn)算 難點(diǎn) 請(qǐng)選擇你授課時(shí)所采用的教學(xué)方法(在括號(hào)中畫“√”): 講授法﹝﹞,討論法﹝﹞,演示法﹝﹞,案例法﹝﹞,發(fā)現(xiàn)法﹝﹞,探究法﹝﹞,教學(xué) 談話法﹝﹞,實(shí)驗(yàn)法﹝√﹞,參觀法﹝﹞,考察法﹝﹞,自學(xué)輔導(dǎo)法﹝﹞,練習(xí) 方法 法(習(xí)題或操作課)﹝√﹞,讀書指導(dǎo)法﹝﹞,聽說法﹝﹞,寫生法﹝﹞,視唱 法﹝﹞,工序法(技能課)﹝﹞,實(shí)習(xí)作業(yè)法﹝﹞,其他﹝﹞ 教學(xué) 實(shí)物﹝﹞,多媒體﹝﹞,投影﹝﹞,影像﹝﹞,CAI課件﹝﹞,PPT﹝√﹞,標(biāo)本 手段 ﹝﹞,掛圖﹝﹞,模型﹝﹞,其他﹝﹞ 討 論、思考 題、作業(yè) [ 1]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu).北京:中國(guó)水利水電出版社,2014.[ 2]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu)習(xí)題集及上機(jī)指導(dǎo).北京:中國(guó)水利水 請(qǐng)選擇你授課時(shí)所采用的教學(xué)手段(在括號(hào)中畫“√”): 參考 電出版社,2014.文獻(xiàn) 教學(xué)過程及內(nèi)容 一、實(shí)驗(yàn)內(nèi)容 .采用順序存儲(chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作。1 2 .采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作。3 .寫一個(gè)程序,將輸入的十進(jìn)制數(shù)據(jù)M轉(zhuǎn)換為八進(jìn)制數(shù)據(jù)M8,將其調(diào)試通過。在此 基礎(chǔ)上修改程序,實(shí)現(xiàn)十進(jìn)制數(shù)據(jù)M向N進(jìn)制(2或8或16)的轉(zhuǎn)換。(1)采用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)棧。(2)采用鏈表結(jié)構(gòu)實(shí)現(xiàn)棧。 二、實(shí)驗(yàn)指導(dǎo) .參考程序?yàn)椋?1 # include //用來存放棧中元素的一維數(shù)組 //用來存放棧頂元素的下標(biāo) } SqStack? intInitStack(SqStack**s)//初始化順序棧 {(*s)=(SqStack*)malloc(sizeof(SqStack))? if((*s)==NULL)returnERROR?(*s)->top=-1? returnOK? } intEmptyStack(SqStacks)//判斷棧空 { if(s.top==-1) { printf(“stackisempty!n”)? returnOK? } returnERROR? } intGetTop(SqStacks,int*e)//取棧頂元算 { if(EmptyStack(s))returnERROR? *e=s.elem[s.top]? — 1— 教學(xué)過程及內(nèi)容 returnOK? } intPush(SqStack*s,inte)//入棧 { if(s->top==Stack_Size-1) { printf(“stackisfull!n”)? returnERROR? } s->top++? s->elem[s->top]=e? returnOK? } voidPrintStack(SqStacks)//打印棧中數(shù)據(jù) { inti? for(i=0?i<=s.top?i++)printf(“%d”,s.elem[i])? printf(“n”)? } intPop_Stack(SqStack*s,int*e)//出棧 { if(EmptyStack(*s)) returnERROR? *e=s->elem[s->top]? s->top--? returnOK? } voidmain(){ intcord,e,x,y? SqStack*s? do { printf(“nMainMenun”)? printf(“1----CreatStackn”)? printf(“2----GetTopElementn”)? printf(“3----Pushn”)? printf(“4----Popn”)? printf(“5----Printn”)? printf(“6----quitn”)? scanf(“%d”,&cord)? — 2— 教學(xué)過程及內(nèi)容 switch(cord){ case1: InitStack(&s)? break? case2: if(GetTop(*s,&y)) printf(“StackTop=[%d]n”,y)? break? case3: printf(“Pleaseinputpushelement:”)? scanf(“%d”,&e)? Push(s,e)? break? case4: if(Pop_Stack(s,&x)) printf(“Popstack=[%d]n”,x)? break? case5: PrintStack(*s)? break? case6: return? } } while(cord<=6)? } 2 .參考程序?yàn)椋?include structstacknode*next? } StackNode? typedefstruct { StackNode*top?/*棧頂指針*/ LinkStack? } — 3— 教學(xué)過程及內(nèi)容 voidInitStack(LinkStack*s)//初始化棧 { s->top=NULL? } intEmptyStack(LinkStacks)//判斷???{ if(s.top==NULL)returnOK? elsereturnERROR? } intGetTop(LinkStacks,int*e)//取棧頂元素 { if(EmptyStack(s))returnERROR? *e=s.top->data? } voidPush(LinkStack*s,inte)//入棧 { StackNode*p=(StackNode*)malloc(sizeof(StackNode))? p->data=e? p->next=s->top? s->top=p? } intPop_Stack(LinkStack*s,int*e)//出棧 { StackNode*p? if(EmptyStack(*s))returnERROR? p=s->top? *e=p->data? s->top=p->next? free(p)? returnOK? } voidPrintStack(LinkStacks)//打印棧中元素 { StackNode*p=s.top? while(p){ printf(“%d”,p->data)? p=p->next? } } voidmain() — 4— 教學(xué)過程及內(nèi)容 { intcord,e,x,y? LinkStacks? do { printf(“nMainMenun”)? printf(“1----CreatStackn”)? printf(“2----GetTopElementn”)? printf(“3----Pushn”)? printf(“4----Popn”)? printf(“5----Printn”)? printf(“6----quitn”)? scanf(“%d”,&cord)? switch(cord){ case1: InitStack(&s)? break? case2: if(GetTop(s,&y)) printf(“StackTop=[%d]n”,y)? break? case3: printf(“Pleaseinputpushelement:”)? scanf(“%d”,&e)? Push(&s,e)? case4: break? if(Pop_Stack(&s,&x)) printf(“Popstack=[%d]n”,x)? break? case5: PrintStack(s)? break? case6: return? } } while(cord<=6)? } 3 .參考程序?yàn)椋?1)(— 5— 教學(xué)過程及內(nèi)容 voidConversion(SqStack*S){ intN,n1,t? printf(“輸入一個(gè)十進(jìn)制數(shù)字:n”)? scanf(“%d”,&N)?//輸入一個(gè)十進(jìn)制數(shù)字 printf(“輸入要轉(zhuǎn)換的n進(jìn)制數(shù)字(2、8、16):n”)? scanf(“%d”,&n1)?//輸入要轉(zhuǎn)換的進(jìn)制 while(N){ Push(S,N%n1)? N=N/n1? } printf(“該數(shù)轉(zhuǎn)化為%d進(jìn)制數(shù)為:t”,n1)? if(n1==16){ while(!EmptyStack(*S)){ Pop_Stack(S,&t)? if(t==10){printf(“A”)?continue?} if(t==11){printf(“B”)?continue?} if(t==12){printf(“C”)?continue?} if(t==13){printf(“D”)?continue?} if(t==14){printf(“E”)?continue?} if(t==15){printf(“F”)?continue?} printf(“%d”,t)? } } else PrintStack(*S)? } voidmain(){ SqStack*S? InitStack(&S)? Conversion(S)? }(2) voidConversion(LinkStack*S){ intN,n1,t? printf(“輸入一個(gè)十進(jìn)制數(shù)字:n”)? scanf(“%d”,&N)?//輸入一個(gè)十進(jìn)制數(shù)字 — 6— 教學(xué)過程及內(nèi)容 printf(“輸入要轉(zhuǎn)換的n進(jìn)制數(shù)字(2、8、16):n”)? scanf(“%d”,&n1)?//輸入要轉(zhuǎn)換的進(jìn)制 while(N){ Push(S,N%n1)? N=N/n1? } printf(“該數(shù)轉(zhuǎn)化為%d進(jìn)制數(shù)為:t”,n1)? if(n1==16){ while(!EmptyStack(*S)){ Pop_Stack(S,&t)? if(t==10){printf(“A”)?continue?} if(t==11){printf(“B”)?continue?} if(t==12){printf(“C”)?continue?} if(t==13){printf(“D”)?continue?} if(t==14){printf(“E”)?continue?} if(t==15){printf(“F”)?continue?} printf(“%d”,t)? } } else PrintStack(*S)? } voidmain(){ LinkStackS? InitStack(&S)? Conversion(&S)? } — 7— 授課進(jìn)度第8周,第14次課(2學(xué)時(shí))授課題目 (教學(xué)章、節(jié)實(shí)驗(yàn)四隊(duì)列 或主題) 授課日期 016年10月19日(10 2 月18日) .掌握隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)的邏輯特性及其主要存儲(chǔ)結(jié)構(gòu)。1 2.在簡(jiǎn)單情況下會(huì)使用順序結(jié)構(gòu)的實(shí)現(xiàn)隊(duì)列,熟練掌握循環(huán)隊(duì)列的使用。.在復(fù)雜情況下會(huì)使用鏈表結(jié)構(gòu)的隊(duì)列,并能在現(xiàn)實(shí)生活中靈活運(yùn)用。3 教學(xué) 目標(biāo) 1.熟練掌握循環(huán)隊(duì)列的使用。 教學(xué) 2.在復(fù)雜情況下會(huì)使用鏈表結(jié)構(gòu)的隊(duì)列。重點(diǎn) 1.鏈隊(duì)列的使用。 教學(xué) 難點(diǎn) 請(qǐng)選擇你授課時(shí)所采用的教學(xué)方法(在括號(hào)中畫“√”): 講授法﹝﹞,討論法﹝﹞,演示法﹝﹞,案例法﹝﹞,發(fā)現(xiàn)法﹝﹞,探究法﹝﹞,教學(xué) 談話法﹝﹞,實(shí)驗(yàn)法﹝√﹞,參觀法﹝﹞,考察法﹝﹞,自學(xué)輔導(dǎo)法﹝﹞,練習(xí) 方法 法(習(xí)題或操作課)﹝√﹞,讀書指導(dǎo)法﹝﹞,聽說法﹝﹞,寫生法﹝﹞,視唱 法﹝﹞,工序法(技能課)﹝﹞,實(shí)習(xí)作業(yè)法﹝﹞,其他﹝﹞ 教學(xué) 實(shí)物﹝﹞,多媒體﹝﹞,投影﹝﹞,影像﹝﹞,CAI課件﹝﹞,PPT﹝√﹞,標(biāo)本 手段 ﹝﹞,掛圖﹝﹞,模型﹝﹞,其他﹝﹞ 討 論、思考 題、作業(yè) [ 1]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu).北京:中國(guó)水利水電出版社,2014.[ 2]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu)習(xí)題集及上機(jī)指導(dǎo).北京:中國(guó)水利水 請(qǐng)選擇你授課時(shí)所采用的教學(xué)手段(在括號(hào)中畫“√”): 參考 電出版社,2014.文獻(xiàn) 教學(xué)過程及內(nèi)容 一、實(shí)驗(yàn)內(nèi)容 .采用順序存儲(chǔ)實(shí)現(xiàn)循環(huán)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作。1 2 .采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作。3 .編寫一個(gè)程序,使用兩個(gè)鏈隊(duì)q1和q2,用來分別存儲(chǔ)由計(jì)算機(jī)隨機(jī)產(chǎn)生的20個(gè) 100以內(nèi)的奇數(shù)和偶數(shù),然后每行輸出q1和q2的一個(gè)值,即奇數(shù)和偶數(shù)配對(duì)輸出,直到任 一隊(duì)列為空為止。 二、實(shí)驗(yàn)說明 .循環(huán)隊(duì)列類型采用如下結(jié)構(gòu): 1 defineMAXSIZE100//最大隊(duì)列長(zhǎng)度 # typedefintElemType? typedefstruct{ ElemTypedata[MAXSIZE]? intfront,rear?//隊(duì)頭、隊(duì)尾指針 SqQueue? } .鏈隊(duì)類型采用如下結(jié)構(gòu): 2 typedefstructQNode { ElemTypedata? structQNode*next? QNode,*QueuePtr? } typedefstruct { QueuePtrfront? QueuePtrrear? LinkQueue? } 三、實(shí)驗(yàn)指導(dǎo) 1.參考程序?yàn)椋?/p> intInitQueue(SqQueue**Q)//初始化循環(huán)隊(duì)列 { * Q=(SqQueue*)malloc(sizeof(SqQueue))? if(!(*Q)) return0? *Q)->front=(*Q)->rear=0?(return1? } intQueueEmpty(SqQueueQ)//判斷隊(duì)空 { returnQ.front==Q.rear? } — 1— 教學(xué)過程及內(nèi)容 intQueueFull(SqQueueQ)//判斷隊(duì)滿 { return(Q.rear+1)%MAXSIZE==Q.front? } intEnQueue(SqQueue*Q,ElemTypee)//入隊(duì)操作 { if(QueueFull(*Q)) /隊(duì)列滿 return0? /Q->data[Q->rear]=e? Q->rear=(Q->rear+1)%MAXSIZE? return1? } intDeQueue(SqQueue*Q,ElemType*e)//出隊(duì)操作 { if(QueueEmpty(*Q))return0? else { *e=Q->data[Q->front]? Q->front=(Q->front+1)%MAXSIZE? return1? } } 2 .參考程序?yàn)椋?/p> intInitQueue(LinkQueue*Q)//將Q初始化為一個(gè)空的鏈隊(duì)列 { Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode))? if(Q->front==NULL) return0? Q->front->next=NULL? return1? } intQueueEmpty(LinkQueueQ)//判斷隊(duì)空 { returnQ.front==Q.rear? } intEnQueue(LinkQueue*Q,ElemTypee)//入隊(duì)操作 { QueuePtrp? p=(QueuePtr)malloc(sizeof(QNode))? if(!p) return0? — 2— 教學(xué)過程及內(nèi)容 p->data=e? p->next=NULL? Q->rear->next=p? Q->rear=p? return1? } intDeQueue(LinkQueue*Q,ElemType*e)//出隊(duì)操作 { QueuePtrp? if(QueueEmpty(*Q))return0?//若隊(duì)列Q為空隊(duì)列 p=Q->front->next? *e=p->data? Q->front->next=p->next? if(Q->rear==p) Q->rear=Q->front?//若Q只有一個(gè)結(jié)點(diǎn) free(p)? return1? } 3 .參考程序?yàn)椋?intmain(){ LinkQueueq1,q2? inti=0,j=0,num? InitQueue(&q1)? InitQueue(&q2)? srand((unsigned)time(NULL))? while(i<20||j<20){ num=rand()%100? if(num%2==0&&i<20){ EnQueue(&q1,num)? i++? } if(num%2!=0&&j<20){ EnQueue(&q2,num)? j++? } } while(!QueueEmpty(q1)&&!QueueEmpty(q2)) — 3— 教學(xué)過程及內(nèi)容 { DeQueue(&q1,&i)?DeQueue(&q2,&j)? printf(“%3d%3dn”,i,j)? } free(q1.front)? free(q2.front)? return0? } — 4— 授課進(jìn)度 授課題目 第9周,第16次課(2學(xué)時(shí))授課日期 016年10月26日(10 2 月25日) (教學(xué)章、節(jié)實(shí)驗(yàn)五二叉樹(Ⅰ)或主題).掌握二叉樹的存儲(chǔ)實(shí)現(xiàn)。1 .掌握二叉樹的遍歷思想。2 教學(xué) 目標(biāo) .掌握二叉樹的存儲(chǔ)實(shí)現(xiàn)。1 .掌握二叉樹的遍歷思想。教學(xué) 2 重點(diǎn) 1.掌握二叉樹的遍歷思想。 教學(xué) 難點(diǎn) 請(qǐng)選擇你授課時(shí)所采用的教學(xué)方法(在括號(hào)中畫“√”): 講授法﹝﹞,討論法﹝﹞,演示法﹝﹞,案例法﹝﹞,發(fā)現(xiàn)法﹝﹞,探究法﹝﹞,教學(xué) 談話法﹝﹞,實(shí)驗(yàn)法﹝√﹞,參觀法﹝﹞,考察法﹝﹞,自學(xué)輔導(dǎo)法﹝﹞,練習(xí) 方法 法(習(xí)題或操作課)﹝√﹞,讀書指導(dǎo)法﹝﹞,聽說法﹝﹞,寫生法﹝﹞,視唱 法﹝﹞,工序法(技能課)﹝﹞,實(shí)習(xí)作業(yè)法﹝﹞,其他﹝﹞ 教學(xué) 實(shí)物﹝﹞,多媒體﹝﹞,投影﹝﹞,影像﹝﹞,CAI課件﹝﹞,PPT﹝√﹞,標(biāo)本 手段 ﹝﹞,掛圖﹝﹞,模型﹝﹞,其他﹝﹞ 討 論、思考 題、作業(yè) [ 1]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu).北京:中國(guó)水利水電出版社,2014.[ 2]李素若,陳萬華,游明坤主編.數(shù)據(jù)結(jié)構(gòu)習(xí)題集及上機(jī)指導(dǎo).北京:中國(guó)水利水 請(qǐng)選擇你授課時(shí)所采用的教學(xué)手段(在括號(hào)中畫“√”): 參考 電出版社,2014.文獻(xiàn) 教學(xué)過程及內(nèi)容 一、實(shí)驗(yàn)內(nèi)容 1.?dāng)?shù)據(jù)域?yàn)樽址囊豢枚鏄溆脧V義表形式輸入,創(chuàng)建一個(gè)采用二叉鏈表存儲(chǔ)的二叉 樹,并按廣義表的形式輸出這棵二叉樹。 .在實(shí)驗(yàn)1的基礎(chǔ)上完成這棵二叉樹的中序遍歷的遞歸算法。2 .在實(shí)驗(yàn)1的基礎(chǔ)上完成這棵二叉樹的中序遍歷的非遞歸算法。3 二、實(shí)驗(yàn)指導(dǎo) .參考代碼為: 1 # defineMaxSize100 voidCreateBTNode(BTree*b,char*str)//廣義表形式輸入二叉樹,按二叉鏈表存儲(chǔ)二叉樹 { BTNode*St[MaxSize],*p=NULL? inttop=-1,k,j=0? charch? *b=NULL? ch=str[j]? while(ch!='