棧的應(yīng)用實驗報告_第1頁
棧的應(yīng)用實驗報告_第2頁
棧的應(yīng)用實驗報告_第3頁
棧的應(yīng)用實驗報告_第4頁
棧的應(yīng)用實驗報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

重慶科技學(xué)院學(xué)生實驗報告課程名稱算法與數(shù)據(jù)結(jié)構(gòu)實驗項目名稱棧的實現(xiàn)與應(yīng)用開課院系及實驗室數(shù)理學(xué)院實驗室I217實驗日期10.10學(xué)生姓名馮帥學(xué)號2009443411專業(yè)班級應(yīng)數(shù)09指導(dǎo)教師陳小強實驗成績教師評語:教師簽字:批改時間:一、實驗?zāi)康暮鸵?、掌握棧和隊列的特點,即先進后出與先進先出的原則。2、掌握棧和隊列的順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)及其基本操作,以便在實際問題中靈活運用。3、掌握棧和隊列的基本操作實現(xiàn)方法。二、實驗內(nèi)容1、棧的實現(xiàn):用C語言實現(xiàn)棧,包括類型定義和各種基本運算的實現(xiàn),并在此基礎(chǔ)上設(shè)計一個主程序,測試棧的一些基本運算:(1).初始化(2).入棧(3).出棧(4).取棧頂元素(5).遍歷棧(6).置空棧請根據(jù)下面給出的程序(改進的順序棧),完成這次實驗,并與鏈棧的實現(xiàn)方法相比較:/*Common.h*/#defineTRUE1//邏輯,是#defineFALSE0//邏輯,否#defineOK1//狀態(tài),成功#defineFAILURE0//狀態(tài),未成功#defineERROR-1//狀態(tài),失敗#defineOVERFLOW1//溢出typedefintBOOL;typedefintStatus;/*seqstack.h*/#include<stdio.h>#include<stdlib.h>#include"common.h"#defineLIST_INIT_SIZE80//線性表存儲空間的初始分配量#defineLISTINCREMENT10//線性表存儲空間的分配增量typedefintElemType;//棧typedefstruct{ ElemType*elem;//存儲空間基址 inttop;//棧頂指示 intcurrentsize;//當前分配的長度}SeqStack;/*構(gòu)造一個空的棧*/SeqStack*CreateStack();/*釋放棧分配的空間*/voidDestroyStack(SeqStack*S);/*判空*/intIsEmpty(SeqStack*S);/*入棧*/StatusPush(SeqStack*S,ElemTypee);/*出棧*/StatusPop(SeqStack*S,ElemType*e);/*取棧頂元素*/StatusGetTop(SeqStack*S,ElemType*e);/*遍歷*/voidTraverse(SeqStack*S,void(*visit)(ElemType,int));/*seqstack.c*/#include<stdio.h>#include<stdlib.h>#include"common.h"#include"seqstack.h"/*構(gòu)造一個空的棧*/SeqStack*CreateStack(){ SeqStack*S=(SeqStack*)malloc(sizeof(SeqStack)); if(S==NULL) { exit(OVERFLOW); } S->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(S->elem==NULL) { exit(OVERFLOW); } S->top=-1; S->currentsize=LIST_INIT_SIZE; returnS;}/*釋放棧分配的空間*/voidDestroyStack(SeqStack*S){ if(S!=NULL) { if(S->elem!=NULL) { free(S->elem); } S->elem=NULL; }}/*判空*/intIsEmpty(SeqStack*S){ returnS->top==-1;}/*入棧*/StatusPush(SeqStack*S,ElemTypee){ if(S->top>=S->currentsize)//當前存儲空間已滿,增加分配 { ElemType*newbase=(ElemType*)realloc(S->elem,(S->currentsize+LISTINCREMENT)*sizeof(ElemType)); if(newbase==NULL)//存儲分配失敗 { exit(OVERFLOW); } S->elem=newbase;//新基址 S->currentsize+=LISTINCREMENT;//增加存儲容量 } ++(S->top); S->elem[S->top]=e; returnOK;}/*出棧*/StatusPop(SeqStack*S,ElemType*e){ if(S->top==-1)//空棧 { returnFAILURE; } (*e)=S->elem[S->top]; --(S->top);//表長減1 returnOK;}/*取棧頂元素*/StatusGetTop(SeqStack*S,ElemType*e){ if(S->top==-1)//空棧 { returnFAILURE; } (*e)=S->elem[S->top]; returnOK;}/*遍歷*/voidTraverse(SeqStack*S,void(*visit)(ElemType,int)){ inti; for(i=0;i<=S->top;i++) { (*visit)(S->elem[i],i+1); }}2.利用棧實現(xiàn)數(shù)制轉(zhuǎn)換:在上述棧實現(xiàn)的基礎(chǔ)上,設(shè)計一個算法實現(xiàn)輸入一個10進制整數(shù),輸出相應(yīng)的2進制表示,并利用計算器工具設(shè)計若干測試數(shù)據(jù)后編寫測試代碼進行測試.#include<stdlib.h>//itoa()是這個文件里的庫函數(shù)

#include<iostream>usingnamespacestd;voidChg10To2(intn,charresult[]);

intChg2To10(chara[]);

intNmi(intm,intn);//計算m的n次方

intCheck(charch);intmain()

{

charstr[33]={0};

chardata1[50]={0};

chardata2[50]={0};

charch;

cout<<"華銳學(xué)院C++作業(yè)"<<endl<<"請輸入一個二進制整數(shù):";

cin>>data1;

cout<<"您的輸入是:"<<data1<<endl;

intnum1=Chg2To10(data1);

cout<<"該數(shù)十進制為:"<<num1<<endl<<endl;

cout<<"請輸入一個二進制整數(shù):";

cin>>data2;

cout<<"您的輸入是:"<<data2<<endl;

intnum2=Chg2To10(data2);

cout<<"該數(shù)十進制為:"<<num2<<endl;

intvalue=0;

cout<<"請輸入一個運算符(+-*/):";

cin>>ch;

switch(ch)

{

case'+':

value=num1+num2;

break;

case'-':

value=num1-num2;

break;

case'*':

value=num1*num2;

break;

case'/':

if(num2==0)

{

cout<<"除數(shù)不能為零"<<endl;

system("pause");

return0;

}

value=num1/num2;

break;

default:

cout<<"不支持的運算符"<<endl;

system("pause");

return0;

break;

}

Chg10To2(value,str);

cout<<endl<<"計算結(jié)果為:(十進制):"<<value<<"二進制為:"<<str<<endl;system("pause");

return0;

}

voidChg10To2(intn,charresult[])

{

charstr[33];itoa(n,str,2);//把num轉(zhuǎn)化為二進制數(shù)形式存入str數(shù)組中

strcpy(result,str);

}

intChg2To10(chara[])

{

intn=0;

intiLength=strlen(a);

cout<<iLength<<endl;

for(inti=iLength;i>0;i--)

{

//

cout<<a[i]<<"";

n+=Check(a[i-1])*Nmi(2,iLength-i);

}

returnn;

}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論