兩棧共享儲存空間 線性結構棧

2021-10-06 03:22:27 字數 1761 閱讀 7645

#ifndef doublestack_h

#define doublestack_h

/* (1)引入

1.如果需要兩個相同型別的棧(順序結構), 分別為了兩個棧開闢儲存空間。

極有可能出現的情況是棧1已經滿了,而棧2還有很多空閒區域。這樣就不合理。

2.解決方法是使用乙個陣列來同時儲存兩個這兩個棧,這樣可以讓兩個順序結構棧動態獲得儲存空間

3.兩棧共享儲存空間的好處是:節省儲存空間,降低上溢的可能性。

4.適用場景:兩個棧的空間需求有相反關係(乙個需求增加會導致另乙個需求下降)時使用。

(2)儲存結構

陣列[bottom1,1,2,3,top1,...,top2,4,9,6,bottom2] // 陣列長度為maxsize

說明:1.棧1在左邊,棧2在右邊

2.棧1向右增長,棧2向左增長。

(3)棧的判定條件

1.棧1為空

top1 == 0

2.棧2為空

top2 == maxsize

3.儲存空間已滿

top1 +1 == top2

(4)壓棧

1.儲存空間已滿就退出

2.如果壓入棧1

top1的下項儲存新元素,top1+1

2.如果壓入棧2

top2的前項儲存新元素,top1-1

(5)彈棧

2.如果彈棧1

如果棧為空,退出。

刪除top1的那一項,top1-1.

2.如果彈棧2

如果棧為空,退出。

刪除top2的那一項,top1+1.

*/#define maxsize 8 // 陣列的最大長度

#include #include #include typedef int delemtype;

typedef enum stacknumstacknum;

typedef struct doublestackdoublestack;

// 初始化雙棧

int init_doublestack(doublestack *s)

// 棧1是空的

int stack1empty(doublestack *s)

// 棧2是空的

int stack2empty(doublestack *s)

// 陣列滿了,不可再壓入元素

int stackfull(doublestack *s)

int stackempty(doublestack *s)

void doublestackinfo(doublestack *s)

}if (s->top2 != maxsize)

}if (stackempty(s))

printf("stack is empty");

printf("\n");

}// 新元素e放入棧num

int doublestackpush(doublestack *s,stacknum num, delemtype e)

else if (num == stack2)

return 0;

}// 從棧num中彈出乙個元素,而用於返回其值

int doublestackpop(doublestack *s,stacknum num, delemtype *e)

else if (num == stack2)

return 0;

}#endif // doublestack_h

棧 兩棧共享空間

對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末...

兩棧共享空間

include include include define ok 1 define error 0 define maxsize 20 typedef int selemtype typedef int status typedef struct sqdoublestack 雙頭棧的初始化 sta...

兩棧共享空間

1.共有棧的實現 package edu.tcu.soft 兩棧共享空間 public class mybothstack 入棧操作 public void push int i,e e else 如果i 2,入右棧 if i 2 出棧操作 suppresswarnings unchecked pu...