實驗二 棧和佇列

2022-08-14 12:57:14 字數 3312 閱讀 6304

這個作業屬於哪個課程

這個作業要求在**

/homework/11296

這個作業的目標

《棧和佇列》

學號2018204153

一、實驗目的

1、掌握棧的結構特性及其入棧,出棧操作;

2、掌握佇列的結構特性及其入隊、出隊的操作,掌握迴圈佇列的特點及其操作。

二、實驗預習

說明以下概念

1、順序棧:棧的順序儲存結構。

2、鏈棧:棧的鏈式儲存結構。

3、迴圈佇列:首尾相連的順序佇列。

4、鏈隊:佇列的鏈式儲存結構。

三、實驗內容和要求

1、閱讀下面程式,將函式push和函式pop補充完整。要求輸入元素序列1 2 3 4 5 e,執行結果如下所示。

#define stack_int_size 10 /*儲存空間初始分配量*/

#define stackincrement 5 /*儲存空間分配增量*/

typedef int elemtype; /*定義元素的型別*/

typedef structsqstack;

int initstack(sqstack *s); /*構造空棧*/

int push(sqstack *s,elemtype e); /*入棧*/

int pop(sqstack *s,elemtype *e); /*出棧*/

int createstack(sqstack *s); /*建立棧*/

void printstack(sqstack *s); /*出棧並輸出棧中元素*/

int initstack(sqstack *s)/*initstack*/

int push(sqstack *s, elemtype e)

*s->top++=e;

return ok;

}/*push*/

int pop(sqstack *s,elemtype *e)/*pop*/

int createstack(sqstack *s)

printf("input data:(terminated by inputing a character)\n");

while(scanf("%d",&e))

push(s,e);

return ok;

}/*createstack*/

void printstack(sqstack *s)/*pop_and_print*/

int main()

演算法分析:輸入元素序列1 2 3 4 5,為什麼輸出序列為5 4 3 2 1?體現了棧的什麼特性?

按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。

體現了先進後出,元素逆序輸出。

2、在第1題的程式中,編寫乙個十進位制轉換為二進位制的數制轉換演算法函式(要求利用棧來實現),並驗證其正確性。

實現**

#include#include#define error 0

#define ok 1

#define stack_init_size 10

#define stackincrement 5

typedef int selemtype;

typedef struct

sqstack;

int initstack(sqstack &s);

int createstack(sqstack *s);

int gettop(sqstack s,selemtype &e);

int push(sqstack &s, selemtype e);

int pop(sqstack &s, selemtype &e);

void conversion();

void main()

int initstack(sqstack &s)

int createstack(sqstack &s)

printf("input data:(terminated by inputing a character)\n");

while(scanf("%d", &e))

push(s, e);

return ok;

}int gettop(sqstack s,selemtype &e)

int push(sqstack &s,selemtype e)

}int pop(sqstack &s,selemtype &e)

void conversion()

pop(s,e);

printf("%d",e);

}

驗證

3、閱讀並執行程式,並分析程式功能。

#include#include#include#define m 20

#define elemtype char

typedef struct

stacknode;

void init(stacknode *st);

void push(stacknode *st,elemtype x);

void pop(stacknode *st);

void init(stacknode *st)

void push(stacknode *st,elemtype x)

}void pop(stacknode *st)

int main()

輸入:2+((c-d)6-(f-7)a)/6

執行結果:

輸入:a-((c-d)*6-(s/3-x)/2

執行結果:

程式的基本功能:

判斷所輸入多項式的左右括號是否配對。

四、實驗小結

學習棧的結構特性及其入棧,出棧操作;掌握佇列的結構特性及其入隊、出隊的操作,練習迴圈佇列的特點及其操作。

實驗二棧和佇列

一 1.順序棧 源 include const int stacksize 10 template class seqstack seqstack void push void pop datatype gettop int empty private datatype data stacksize...

實驗二 棧和佇列 順序棧 順序佇列

棧是什麼?棧是一種結構,也是一種方式。棧代表著 後進先出 我是這麼理解的 如圖 就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層乙個個拿,這種方式叫做棧。棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對...

實驗二 棧和佇列的應用

實驗目的 本次實驗的目的在於使學生深入了解棧和佇列的特徵,掌握在實際問題背景下的靈活運用。實驗要求 正確設計和實現本程式,記錄輸出結果。實驗內容 1 佇列的各種基本操作實現。2 十進位制數向n進製資料的轉換。棧的應用 附 include include include define overflow...