第3次實驗-實驗報告_第1頁
第3次實驗-實驗報告_第2頁
第3次實驗-實驗報告_第3頁
第3次實驗-實驗報告_第4頁
第3次實驗-實驗報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGEPAGE2附件2:北京理工大學珠海學院實驗報告ZHUHAICAMPAUSOFBEIJINGINSTITUTEOFTECHNOLOGY班級計算機X班學號1202010XXXXX姓名XXX指導教師余俊杰成績實驗題目棧的實現(xiàn)與應用實驗時間2014-3-25一、實驗目的、意義(1)理解棧的特點,掌握棧的定義和基本操作。(2)掌握進棧、出棧、清空棧運算的實現(xiàn)方法。(3)熟練掌握順序棧的操作及應用。二、實驗內容及要求1.定義順序棧,完成棧的基本操作:建空棧、入棧、出棧、取棧頂元素(參見教材45頁)。調用棧的基本操作,將十進制數(shù)轉成十六進制數(shù)。提示:余數(shù)入棧全為整數(shù),出棧時判斷:<=9輸出整數(shù),否則輸出對應的字母。2.調用棧的基本操作,求出表達式的值。如,輸入13*(7-2)#,輸出65。提示:如果輸入的字符是數(shù)字,不能馬上入棧,要判斷下一個字符是否還是數(shù)字。三、實驗所涉及的知識點數(shù)據(jù)結構,C語言結構體,順序棧的建空,出入,取棧四、實驗結果及分析五、總結與體會對于數(shù)據(jù)結構學起來還是相當吃力的,需要在課后多練習提高。這次實驗通過多個函數(shù)出現(xiàn)在同一個程序中的實現(xiàn),便于熟悉全局變量和局部變量在程序中六、程序清單(包含注釋)#include<stdio.h>#include<stdlib.h>#include<malloc.h>//定義一個節(jié)點的結構typedefstructnode{intmember;//數(shù)據(jù)域structnode*pNext;//指針域}Node,*pNode;//定義一個棧結構typedefstructstack{pNodeTop;//棧頂pNodeBottom;//棧底}Stack,*pStack;voidInitStack(pStack);//初始化棧的函數(shù)boolPush(pStack,int);//進行壓棧操作的函數(shù)voidTraverseStack(pStack);//遍歷棧函數(shù)boolEmpty(pStack);//判斷棧是否為空的函數(shù)intPop(pStack);//進行出棧操作的函數(shù)voidClear(pStack);//清空棧的函數(shù)intmain(void){Stacks;//定義一個棧inti;intnum;intdata;//臨時保存用戶輸入的數(shù)據(jù)intre_num;//保存Pop函數(shù)的返回值InitStack(&s);printf("你想輸入幾個數(shù)據(jù)?。?);scanf("%d",&num);for(i=0;i<num;i++){printf("第%d個數(shù):",i+1);scanf("%d",&data);if(Push(&s,data))//調用Push函數(shù){continue;}else{printf("進行進棧操作失??!\n");exit(-1);}}TraverseStack(&s);//調用遍歷函數(shù)printf("你想去掉幾個數(shù)啊:");scanf("%d",&data);printf("你去掉的數(shù)字是:");for(i=0;i<data;i++){re_num=Pop(&s);//調用Pop函數(shù),并把返回值賦給re_num;printf("%d",re_num);}printf("看看刪除后還有啥:");TraverseStack(&s);printf("\n");Clear(&s);//調用清空棧函數(shù)printf("遍歷下看看棧清空沒····\n");TraverseStack(&s);printf("\n");return0;}//進行棧的初始化的函數(shù)voidInitStack(pStackps){ps->Top=(pNode)malloc(sizeof(Node));//分配內存空間給棧頂if(NULL==ps->Top){printf("動態(tài)分配內存失敗\n");exit(-1);}else{ps->Bottom=ps->Top;//使棧底也指向棧頂空間ps->Top->pNext=NULL;//棧頂指針置為NULL;}return;}//進行進棧操作的函數(shù)boolPush(pStackps,intdata){pNodepNew=(pNode)malloc(sizeof(Node));//定義一個新節(jié)點,并分配內存空間if(NULL==pNew){returnfalse;}pNew->member=data;//把要進棧的數(shù)據(jù)賦給新節(jié)點的member成員pNew->pNext=ps->Top;//使新節(jié)點的指針指向棧頂ps->Top=pNew;//把新節(jié)點作為新棧頂returntrue;}//遍歷棧的函數(shù)voidTraverseStack(pStackps){pNodepNew=ps->Top;while(pNew!=ps->Bottom)//只要棧頂不等于棧底,循環(huán){printf("%d",pNew->member);//打印棧頂?shù)某蓡TmemberpNew=pNew->pNext;//棧頂指針向下移動一次}return;}//判斷棧是否為空boolEmpty(pStackps){if(ps->Top==ps->Bottom)//棧頂?shù)扔跅5?,不就是棧中沒數(shù)據(jù)么{returntrue;}else{returnfalse;}}//進行出棧操作函數(shù)intPop(pStackps){pNodepSwap=NULL;intreturn_val;if(Empty(ps))//判斷棧是否為空,為空就不能進行出棧操作{exit(-1);}else{return_val=ps->Top->member;//把棧頂?shù)某蓡Tmember的值賦給return_val做為函數(shù)返回值pSwap=ps->Top;//使pSwap指向棧頂ps->Top=ps->Top->pNext;//使棧頂指向棧頂下一個節(jié)點free(pSwap);//釋放以前的棧頂空間returnreturn_val;}}//清空棧的函數(shù)voidClear(pStackps){pNodepNew=NULL;while(ps->Top!=ps->Bottom)//棧頂和棧底不等,循環(huán)

溫馨提示

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

評論

0/150

提交評論