第三章 棧和佇列

2021-06-27 07:37:20 字數 4791 閱讀 6408

第三章棧和佇列 一.

棧1.棧:限定僅在表尾進行插入和刪除操作的線性表(允許插入和刪除的一端稱為棧頂

;另一端稱為棧底)。

2.空棧:不含任何資料元素的棧。

3.在任何時候出棧的元素都只能是棧頂元素,即最後入棧者最先出棧,具有後進先出的特性。

4.棧的抽象資料型別定義:

(1)push

(輸入:元素值

x;輸出:如果插入不成功,則丟擲異常)功能:入棧操作,在棧頂插入乙個元素x。

(2)pop

(輸入:無;輸出:如果刪除成功,返回被刪元素值,否則丟擲異常)功能:出棧操作,刪除棧頂元素。

(3)gettop

(輸入:無;輸出:若棧不空,返回當前的棧頂元素值)功能:取棧頂元素,讀取當前的棧頂元素。

(4)empty

(輸入:無;輸出:如果棧為空,返回

1,否則返回

0)功能:判空操作,判斷棧是否為空。

5.(1)

順序棧的實現:

模板:const int stacksize=10;

template

class seqstack

void push(dt x);

dt pop();

dt gettop();

int empty();

private:

dt data[stacksize];

int top; };

(2).

順序棧:

(1)入棧演算法

push

:template

void seqstack::push(dt x)

(2)出棧演算法

pop:

template

dt seqstack::pop() 6.

鏈棧:(1)

入棧演算法

push:

template

void linkstack::push(dt x)

(2)出棧演算法

pop:

template

dt linkstack::pop()

二.佇列

1.佇列:只允許在一端進行插入操作,在另一端進行刪除操作的線性表。

2.佇列中的元素具有先進先出的特性。

3.佇列的抽象資料型別定義

(1)enqueue(

輸入:元素值

x;輸出:如果插入不成功,則丟擲異常

)功能:入隊操作,在對尾插入乙個元素。

(2)dequeue(

輸入:無;輸出:如果刪除成功,返回被刪元素值,否則,丟擲刪除異常)

功能:出隊操作,刪除隊頭元素。

(3)getqueue(

輸入:無;輸出:若佇列不空,返回隊頭元素

)功能:讀取隊頭元素。

(5)empty(

輸入:無;輸出:如果隊列為空,返回

1,否則返回

0)功能:判空操作,判斷佇列是否為空。

4.(1)

模板:const int queuesize=100;

template

class cirqueue

~cirqueue(){}

void enqueue(data typex);

dt dequeue();

de getqueue();

int empty()

private:

dt data[queuesize];

int front,rear; };

(2)迴圈佇列:

(1)入隊演算法

enqueue

:template

void cirqueue::enqueue(data typex)

(2)出隊演算法

dequeue:

template

dt cirqueue::dequeue()

(3)讀取隊頭元素演算法

getqueue:

template

dt cirqueue::getqueue()

5.鏈佇列

(1)建構函式演算法

linkqueue

:template

linkqueue::linkqueue()

(2)入隊演算法

enqueue

:template

void linkqueue::enqueue(data typex)

(3)出隊演算法

dequeue

:template

dt linkqueue::dequeue()

第三章關聯實驗 順序棧和鏈佇列的操作

一.實驗目的

1.掌握棧的順序儲存結構;驗證順序棧及其基本操作的實現;驗證棧的操作特性。 2

.掌握佇列的鏈結儲存結構;驗證鏈佇列的儲存結構和基本操作的實現;驗證佇列的操作特性。

二.問題描述1

.建立乙個空棧;對已建立的棧進行插入、刪除、取棧頂元素等基本操作。 2

.建立乙個空佇列;對已建立的佇列進行插入、刪除、取佇列元素等基本操作。

三.實驗要求1

.根據棧的操作特性順序實現棧的操作;編寫適當的主程式**驗證棧的相關操作。 2

.定義鏈佇列的資料型別——鏈佇列類

linkqueue

,包括入隊、出隊、取隊頭元素等基本操作;鏈佇列類

linkqueue

的定義以及基本操作的演算法請參見教材

3.2.3節。

四.實驗環境pc

微機 dos作業系統或

windows

作業系統

turbo c

程式整合環境或

visual c++

程式整合環境

五.實驗步驟及結果1

.根據棧的操作特性順序實現棧的操作;編寫適當的主程式**驗證棧的相關操作。 1

.建立乙個seqstack_h標頭檔案

#ifndef seqstack_h

#define seqstack_h

const int stacksize=10;

template

class seqstack

void push(datatype x);

datatype pop();

datatype gettop();

int empty();

private:

datatype data[stacksize];

int top; };

#endif 2

.建立乙個seqstack.cpp檔案

#include"seqstack.h"

template

seqstack::seqstack()

template

void seqstack::push(datatype x)

template

datatype seqstack::pop ()

template

datatype seqstack::gettop ()

template

int seqstack::empty ()

3、建立seqstack_main檔案

#include

using namespace std;

#include"seqstack.cpp"

void main()

實驗二:建立乙個空佇列;對已建立的佇列進行插入、刪除、取佇列元素等基本操作。 .

1、新建乙個

linkqueue

檔案如圖:

#ifndef linkqueue_h

#define linkqueue_h

template

struct node

;template

class linkqueue

;#endif;

2、新建乙個

linkqueue.cpp

檔案如圖:

#include" linkqueue.h"

template

linkqueue:: linkqueue()

template

linkqueue:: ~linkqueue()

}template

void linkqueue:: enqueue(datatype x)

template

datatype linkqueue:: dequeue()

template

datatype linkqueue:: getqueue()

template

int linkqueue::empty ()

3、新建乙個

linkqueue_main

主檔案如圖:

#include

using namespace std;

#include"linkqueue.cpp"

void main()

catch(char*wrong)

cout<<"

檢視隊頭元素

"<

cout<

cout<<"

執行出隊操作:

"<

try

catch(char*wrong)

cout<<"

檢視隊頭元素

:"<

cout<}

第三章 棧和佇列

棧和佇列 一 棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。2 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。3 棧的抽象資料型別定義 ...

第三章 棧和佇列

棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...

第三章 棧和佇列

3.1 棧 3.1.1 棧的邏輯結構 1.棧 限定僅在表的一端進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。空棧 不含任何資料元素的棧。棧的操作特性 後進先出 注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。2.棧的抽象資料型別定義 a...