第四次作業 棧和佇列

2022-08-11 23:15:24 字數 3447 閱讀 4327

這個作業屬於哪個課程

這個作業要求在**

/homework/11296

這個作業的目標

理解棧、佇列的概念,掌握入棧、出棧、入隊、出隊的操作

學號2018204254

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

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

說明以下概念

1、順序棧:

順序棧是棧的順序實現。順序棧是指利用順序儲存結構實現的棧。採用位址連續的儲存空間(陣列)依次儲存棧中資料元素,由於入棧和出棧運算都是在棧頂進行,而棧底位置是固定不變的,可以將棧底位置設定在陣列空間的起始處;棧頂位置是隨入棧和出棧操作而變化的,故需用乙個整型變數top來記錄當前棧頂元素在陣列中的位置。

2、鏈棧:

鏈式棧是一種資料儲存結構,可以通過單鏈表的方式來實現,使用鏈式棧的優點在於它能夠克服用陣列實現的順序棧空間利用率不高的特點,但是需要為每個棧元素分配額外的指標空間用來存放指標域。

3、迴圈佇列:

為充分利用向量空間,克服"假溢位"現象的方法是:將向量空間想象為乙個首尾相接的圓環,並稱這種向量為迴圈向量。儲存在其中的佇列稱為迴圈佇列(circular queue)。迴圈佇列是把順序佇列首尾相連,把儲存佇列元素的表從邏輯上看成乙個環,成為迴圈佇列。

迴圈佇列就是將佇列儲存空間的最後乙個位置繞到第乙個位置,形成邏輯上的環狀空間,供佇列迴圈使用。在迴圈佇列結構中,當儲存空間的最後乙個位置已被使用而再要進入隊運算時,只需要儲存空間的第乙個位置空閒,便可將元素加入到第乙個位置,即將儲存空間的第乙個位置作為隊尾。 迴圈佇列可以更簡單防止偽溢位的發生,但佇列大小是固定的。

4、鏈隊:

鏈隊是指採用鏈式儲存結構實現的佇列,它的基本操作為:初始化鏈隊、銷毀鏈隊、清空鏈隊、檢測鏈隊是否為空、返回鏈隊的元素個數、返回鏈隊頭元素、向隊尾插入元素、刪除並返回隊頭元素、遍歷鏈隊。

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

">

#define error 0

#define ok 1

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

#define stackincreament 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)

else

return error;

}/*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?體現了棧的什麼特性?

體現了棧是只允許在表的一端進行操作的線性表並且具有先進後出的特性。因為當main函式呼叫printstack(&ss)時,程式轉到函式體中,而在該函式體內,又呼叫了intpop(sqstacks,elemtypee),此函式的功能是棧s的棧頂元素退棧並返回其值。所以輸入元素序列12345,輸出序列為54321。而這則體現了棧是只允許在表的一端進行操作的線性表並且具有先進後出的特性。

執行結果:

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

實現**

void conveshen(sqstack *s)

while(k驗證

執行結果:

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

">#include#define m 20

#define elemtype char

typedef structstacknode;

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

執行結果:

程式的基本功能:

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

理解了棧、佇列的概念,基本熟悉了入棧、出棧、入隊、出隊的操作。

第四次作業 棧和佇列

這個作業屬於哪個課程 這個作業要求在 homework 11296 這個作業的目標 掌握棧的結構特性及其入棧,出棧操作。掌握佇列的結構特性及其入隊 出隊的操作,掌握迴圈佇列的特點及其操作。學號2018204163 一 實驗目的 1 掌握棧的結構特性及其入棧,出棧操作 2 掌握佇列的結構特性及其入隊 ...

第四次作業 棧和佇列

這個作業屬於哪個課程 這個作業要求在 這個作業的目標 掌握棧的結構特性及其入棧,出棧操作。掌握佇列的結構特性及其入隊 出隊的操作,掌握迴圈佇列的特點及其操作。學號2018204188 說明以下概念 1.順序棧 順序棧是棧的順序實現。順序棧是指利用順序儲存結構實現的棧。採用位址連續的儲存空間 陣列 依...

第四次作業 實驗二 棧和佇列

這個作業屬於哪個課程 這個作業要求在 homework 11296 這個作業的目標 掌握棧的結構特性及其入棧,出棧操作 掌握佇列的結構特性及其入隊 出隊的操作,掌握迴圈佇列的特點及其操作 學號2018204167 1 掌握棧的結構特性及其入棧,出棧操作 2 掌握佇列的結構特性及其入隊 出隊的操作,掌...