第一篇:實驗總結(jié)報告-棧和隊列
實驗總結(jié)報告—棧和隊列
學(xué)號:
姓名: 時間:
一、目的 1.做實驗的目的
加深對線性結(jié)構(gòu)棧和隊列的理解,學(xué)會定義棧和隊列的存儲結(jié)構(gòu),加強對棧和隊列操作機制的理解,掌握棧和隊列的基本操作,了解棧和隊列的一些應(yīng)用。2.撰寫實驗報告的目的
對本次實驗情況進行總結(jié),加強對實驗內(nèi)容的理解,對實驗過程有一個系統(tǒng)的認(rèn)識,從中獲得本次試驗的經(jīng)驗,并對實驗結(jié)果進行適當(dāng)?shù)姆治觯由顚:完犃械睦斫夂驼J(rèn)識。
二、內(nèi)容
1.說明實驗次數(shù)及實驗內(nèi)容 本次實驗用一次實驗課時完成 實驗內(nèi)容:
(1)、編寫函數(shù)CreatStack_sq(), DestoryStack_sq(), Push_sq(), Pop_sq(),StackEmpty_sq()和
StackTraverse_sq(),分別完成創(chuàng)建空棧,銷毀棧,入棧,出棧,判斷棧是否為空,遍歷棧底到棧頂依
次打印棧內(nèi)元素等功能(不要修改原棧),完成后進行測試。測試要求:在main 中,建立棧;判斷棧是否為空;將0~9 入棧;將棧頂兩個元素出棧, 兩元素求和后再入棧;從棧底到棧頂依次打印元素,再從棧頂?shù)綏5状蛴≡?;銷毀棧。
void CreatStack_sq(SqStack &S, int msize = STACK_INIT_SIZE){...} void DestoryStack_sq(SqStack &S){...}void Push_sq(SqStack &S, ElementType e){...} bool Pop_sq(SqStack &S, ElementType &e){...} bool StackEmpty_sq(SqStack S){...} bool StackTraverse_sq(SqStack S){...}(2)、編寫函數(shù), CreateQueue_L(), DestoryQueue_L(), EnQueue_L(),DeQueue_L(),分別完
成創(chuàng)建隊列,銷毀隊列,入隊列,出隊列等操作,完成后進行測試。測試要求:在主程序中,建立隊列,將0~9 依次入隊列,按入隊列順序出隊列并打印, 銷毀隊列。
void CreateQueue_L(LinkQueue &Q){ } void DestoryQueue_L(LinkQueue &Q){ } void EnQueue_L(LinkQueue &Q,int e){ } bool DeQueue_L(LinkQueue &Q, int &e){ }(3)、回文是指正讀反讀均相同的字符序列,如”abba”和”abdba”均是回文, 但”good”不是回文。根據(jù)第四章棧和隊列所學(xué)內(nèi)容,試寫一個算法判
定給定的字符向量是否為回文。測試數(shù)據(jù): 2.1 char* ch = “abccba”;2.2 char* ch = “abccbd”;(4)、(附加題)編寫函數(shù)void Knapsack(int w[],int T,int n),完成背包求解問題。測試數(shù)據(jù): w[6] = {2,8,6,5,1,4};2.做實驗完成情況
實驗內(nèi)容在實驗課時時間內(nèi)完成(提前編寫了大概1/3部分的代碼),選做內(nèi)容也完成。
本次實驗內(nèi)容較多,為使代碼看著簡潔有條理,采用了建工程的方式。棧部分:
自定義了頭文件 L_stack.h: /*自定義頭文件*/ #include
#define STACK_INIT_SIZE 100;#define STACKINCREMENT 100;
/*自定義頭文件(棧相關(guān))*/
#include
/*棧的結(jié)構(gòu)體定義*/ typedef struct{
ElemType *elem;int top;int stacksize;}SqStack;
void CreateStack_sq(SqStack &S,int msize);//創(chuàng)建棧,msize為棧的大小 void DestroyStack_sq(SqStack &S);//銷毀棧
void Push(SqStack &S, ElemType e);// 進棧操作,e為入棧元素 int Pop_sq(SqStack &S, ElemType &e);//出站操作,成功返回0,不成功返回-1 void Increment(SqStack &S, int inc_size);//增加??臻g int StackEmpty_sq(SqStack S);//判斷???,??辗祷?,棧非空返回-1; void StackTraverse_sq1(SqStack S);//遍歷棧底到棧頂,若棧非空則依次打印棧中元素
void StackTraverse_sq2(SqStack S);//遍歷棧頂?shù)綏5?,若棧非空則依次打印棧中元素
void Test_sq();//棧的檢測程序
void MatchBracket_sq(char exp[]);// 括號匹配 void MatchWord_sq(char exp[]);//判斷回文 void knapsack(int w[], int T, int n);//背包問題
在頭文件中對所有要用到的自定義函數(shù)進行了聲明,各函數(shù)的功能可見代碼注釋部分。
棧的創(chuàng)建:
#include“L_stack.h”
void CreateStack_sq(SqStack &S,int msize){
S.elem = new ElemType[msize];S.stacksize = msize;S.top =-1;}//end CreateStack_sq 此操作完成棧的創(chuàng)建,創(chuàng)建完成得到一個空棧。
棧的銷毀:
#include“L_stack.h”
void DestroyStack_sq(SqStack &S){
delete S.elem;S.top =-1;S.stacksize = 0;}//end DestroyStack_sq 此操作將棧銷毀。
入棧:
#include“L_stack.h” #include
void Push(SqStack &S, ElemType e){
if(S.top == S.stacksize0;break;case '}':
if(!Pop_sq(S, e)|| e!= '{')matchstat = 0;break;}//end switch ch = *exp++;}//end while
if(matchstat&&StackEmpty_sq(S))printf(“括號匹配n”);else printf(“括號不匹配n”);}//end MatchBracket_sq 該操作完成括號的匹配;
回文判斷:
#include“L_stack.h”
void MatchWord_sq(char exp[]){
int i, len=0,flag=1;SqStack S;CreateStack_sq(S, 100);char ch,e;for(i = 0;exp[i]!='