第三章棧和佇列 一.
棧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...