共享棧的實現(C 版)

2021-06-22 04:02:21 字數 1022 閱讀 9287

前言

棧的應用非常廣泛,經常出現 乙個程式需要同時使用多個棧的情況。使用順序棧會由於棧大小難以準確估計,從而造成有的棧溢位,有的棧空閒。為了解決這個問題,可以讓多個棧共享乙個足夠大的連續儲存空間,通過利用棧的動態特性使多個棧的儲存空間能夠互相補充,儲存空間得到有效利用,這就是共享棧。

在棧的共享問題中,最常用的是兩個棧的共享。共享棧主要利用棧頂固定,棧頂迎面增長的方式。實現方法是兩個棧共享乙個一維陣列空間,兩個棧的棧頂設在陣列的兩端,當有意思進棧時,棧頂位置從棧的兩端迎面增長,當兩個棧的棧頂相遇時,棧滿。

兩個共享棧的資料結構型別定義如下:

typedef struct

sseqstack;

其中,top[1]和top[2]分別是兩個棧的棧頂指標。

共享棧的演算法操作:

(1)初始化操作。

void initstack(sseqstack *s)

(2)進棧操作。

首先判斷棧是否已滿,另外還要通過乙個標誌變數flag判斷是哪個棧要進行進棧操作。

int pushstack(seqstack *s,datatype e,int flag)

switch(flag)

return 1;

}

(3)出棧操作。

int popstack(seqstack *s,datatype *e,int flag)

s->top[0]--;

*e=s->stack[s->top[0]];

break;

case 1:

if (s->top[1]==stacksize-1)

s->top[1]++;

*e=s->stack[s->top[1]];

break;

default:

return 0;

} return 1;

}

資料結構c 順序表實現棧(共享棧)

基於順序表實現,陣列有連個端點,兩個端點為兩個棧的棧低,兩個棧共用乙個陣列。pragma once const int size 20 enum statcknumber class sharedstacks void push int d,statcknumber statck else 第二個棧...

實現包含min函式的棧 C 版

題目 實現乙個特殊的棧,要求除了實現基本棧功能,還需要實現返回棧中最小元素的功能。要求 pop push top min 等操作的時間複雜度均為o 1 思路 考慮使用2個棧,乙個用於儲存待壓入的資料,另乙個棧專門用於儲存最小值。初始 2個棧都為空 將元素都壓入進去。之後 如果待壓入的元素 最小值棧的...

C語言實現兩棧空間共享

乙個同學讓我改一段兩棧共享的c語言 實現進棧 出棧 輸出棧裡元素的功能。如下 include include define maxsize 100 typedef intelemtype typedef intstatus typedef struct stack,pstack 初始化 status...