資料結構筆記 第三章 棧和佇列

2021-09-29 02:06:25 字數 2992 閱讀 2664

棧:限定僅在表尾進行插入和刪除操作的線性表。

允許插入和刪除的一端稱為棧頂,另一端稱為棧底。

設指標top指示棧頂元素在陣列中的位置。    進棧:top加1    出棧:top減1     棧空:top=  -1     棧滿:top=  max_size-1

順序棧類的宣告 :

const  int  max_size=100;

template class seqstack

順序棧的實現——入棧:

template void  seqstack::push ( t  x)

順序棧的實現——取棧頂:

template t  seqstack::gettop ( )

順序棧的實現——出棧:

template  t  seqstack:: pop ( )

兩棧共享空間

兩棧共享空間:棧1的底固定在下標為0的一端;

棧2的底固定在下標為stacksize-1的一端。

top1和top2分別為棧1和棧2的棧頂指標;

stack_size為整個陣列空間的大小(圖中用s表示);

什麼時候棧1為空?   top1= -1

什麼時候棧2為空?   top2= stack_size

兩棧共享空間類的宣告:

const int stack_size=100;  

template class bothstack

;

兩棧共享空間的實現——插入:

1. 如果棧滿,則丟擲上溢異常;

2. 判斷是插在棧1還是棧2;        

2.1 若在棧1插入,則            

2.1.1 top1加1;              

2.1.2 在top1處填入x;      

2.2 若在棧2插入,則              

2.2.1 top2減1;            

2.2.2 在top2處填入x;

template void bothstack::push(int i, t x )

兩棧共享空間的實現——刪除

template t bothstack::pop(int i)

if (i==2)

}

取某個棧棧頂的演算法:

template t bothstack::gettop(int i)

if(i==2)

}

鏈 棧 的 類 聲 明:

template class linkstack

; ~linkstack( );

void push(t x);

t pop( );

t gettop( );

bool empty( );

private:

node*top;

}

鏈棧的實現——插入(入棧):

template void linkstack::push(t x)

鏈棧的實現——刪除(出棧):

template t linkstack::pop( )

鏈棧的實現——鏈棧的析構(鏈棧的銷毀):

template linkstack::~linkstack( )

}

佇列

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

允許插入(也稱入隊、進隊)的一端稱為隊尾,允許刪除(也稱出隊)的一端稱為隊頭。 

佇列的操作特性:先進先出

迴圈時:rear=(rear+1)% maxsize               front=(front+1) % mazsize

隊滿的條件:(rear+1) mod queuesize==front

循 環 隊 列 類 的 聲 明:

const int queuesize=100; 

template class cirqueue;

private:

t data[queuesize];

int front, rear;

};

迴圈佇列的實現——入隊:

template void cirqueue::enqueue(t x)

迴圈佇列的實現——出隊:

template t cirqueue::dequeue( )

迴圈佇列的實現——讀隊頭元素:

template t cirqueue::getqueue( )

迴圈佇列的實現——佇列長度:

template int cirqueue::getlength( )

鏈 隊 列 類 的 聲 明:

template class linkqueue

;

鏈佇列的實現——建構函式:

template linkqueue::linkqueue( )

鏈佇列的實現——入隊:

template void linkqueue::enqueue(t x)

鏈佇列的實現——出隊:

template t linkqueue::dequeue( )

資料結構筆記 第三章棧和佇列

棧 限制插入 刪除資料的位置 3.2.1 1.棧的定義 棧是只能在表的一端進行插入刪除操作的線性表,允許插入 入棧 和刪除 出棧 的一端稱為棧頂,另一端稱為棧底,不含有任何資料元素的棧稱為空棧。後進先出,即任何時刻出棧的元素都只能是棧頂元素。設定指示器,記錄棧頂位置。2.棧的抽象資料型別定義 sta...

資料結構第三章棧和佇列

第四章 棧和佇列 1.棧 限定僅在表尾進行插入或刪除操作的線性表,表尾端稱為棧頂,表頭端稱為棧底。棧頂移動,棧底固定。特點 先進後出 後進先出 typedef struct sqstack status push sqstack s,selemtype e status pop sqstack s,...

資料結構 第三章 棧和佇列

目錄 3.1 堆疊的基本概念 3.2 堆疊的順序儲存結構 一 構造原理 二 實現 三.多棧共享連續空間問題 3.3 堆疊的鏈式儲存結構 一.構造原理 二 實現 3.4 佇列的基本概念 3.5佇列的順序儲存結構 一.構造原理 二 實現 三.迴圈佇列 3.5 佇列的鏈式儲存結構 一.構造原理 二 實現 ...