多棧共享技術,雙端棧的初始化、進棧、出棧操作

    棧的應用非常廣泛,經常會出現一個程序中需要同時使用多個棧的情況。若使用順序棧,會因爲對棧空間大小難以準確估計,從而產生有的棧溢出、有的棧空間還很空閒的情況。爲了解決這個問題,可以讓多個棧共享一個足夠大的數組空間,通過利用棧的動態特性來使其存儲空間互相補充,這就是多棧的共享技術。

    在順序棧的共享技術中,最常用的是兩個棧的共享技術,即雙端棧。它主要利用了棧的棧底位置不變,而棧頂位置動態變化的特性。

實現代碼如下:

#include<iostream>

using namespace std;

#define  TRUE 1

#define  FALSE 0

#define M 100 


//雙端順序棧的存儲結構

typedef struct

{

int Stack[M];//Stack[M]爲棧區

int top[2];//top[0]和top[1]分別爲兩個棧頂指示器

}DqStack;


//初始化雙端順序棧

void InitStack(DqStack *S)

{

S->top[0] = -1;

S->top[1] = M;

}


//雙端順序棧進棧操作

int Push(DqStack *S,int x,int i)//把數據元素x壓入i號堆棧

{

if (S->top[0]+1 == S->top[1])//棧已滿

{

return FALSE;

}

switch (i)

{

case 0:   //0號棧

S->top[0]++;

S->Stack[S->top[0]] = x;

break;

case 1:   //1號棧

S->top[1]--;

S->Stack[S->top[1]] = x;

break;

default:    //參數錯誤

return FALSE;

break;

}

return TRUE;

}


//雙端順序棧出棧操作

int Pop(DqStack *S, int *x, int i)//從i號堆棧中彈出棧頂元素並送到x中

{

switch (i)

{

case 0:   //0號棧出棧

if (S->top[0] ==-1)

{

return FALSE;

}

*x=S->Stack[S->top[0]] ;

S->top[0]--;

break;

case 1:   //1號棧出棧

if (S->top[1] == M)

{

return FALSE;

}

*x = S->Stack[S->top[1]];

S->top[1]++;

break;

default:    

return FALSE;

break;

}

return TRUE;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章