兩棧共享儲存空間(用乙個陣列儲存兩個棧)

2021-06-22 01:26:45 字數 1120 閱讀 9945

思想:先開闢一段連續的儲存空間(乙個陣列);兩個棧棧頂分別指向陣列的兩端,隨著push操作兩棧的棧頂向陣列內側移動;隨著pop操作兩棧的棧頂向陣列外側移動。

#include #include //棧的順序儲存結構,用一維陣列實現

#define ok 1

#define error -1

#define true 1

#define false 0

#define maxsize 100

typedef int status;

typedef int elemtype;

//用乙個陣列來儲存兩個棧;思想是兩個棧的棧頂分別在陣列的兩端

typedef structdoublestack;

//1. 初始化操作

status initds(doublestack *ds)

//2. 對於兩棧共享空間的push方法,我們除了要插入元素值引數外,還需要有乙個判斷是棧1還是棧2的棧號引數

status doublepush(doublestack *ds,elemtype e,int s_number)

if(s_number==1)else if(s_number==2)

return ok;

}//兩棧共享空間的pop方法

status doublepop(doublestack *ds,elemtype *e,int s_number)else if(ds->top1==-1)

}else if(ds->top2==maxsize)

}if(1==s_number)else if(2==s_number)else

return ok;

}int main()

int e,s_number;

printf("想要插入的值及棧號\n");

while(2==scanf("%d,%d",&e,&s_number))

printf("\n棧2的元素為:");

while(j>=ds.top2)}}

printf("輸入出棧的棧號\n");

while(1==scanf("%d",&s_number))

return 0;

}

乙個陣列實現兩個棧 共享棧

問題分析 在順序棧的實現中,元素入棧是從下標為0的位置向上增長的,出棧是通過size 實現的。要想用乙個陣列實現2個棧,可以除了下標從0開始增長,還同時讓另乙個棧下標從size 1處開始減少。問題解決 定義top1,top2分別代表2個棧棧頂的下乙個位置的下標。棧1入棧時,元素放入top1位置,再使...

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

ifndef doublestack h define doublestack h 1 引入 1.如果需要兩個相同型別的棧 順序結構 分別為了兩個棧開闢儲存空間。極有可能出現的情況是棧1已經滿了,而棧2還有很多空閒區域。這樣就不合理。2.解決方法是使用乙個陣列來同時儲存兩個這兩個棧,這樣可以讓兩個順...

順序儲存之兩棧共享空間原理

反覆看了幾遍 大話資料結構 第四章的4.5節,始終不太理解順序儲存的兩棧共享是如何實現的 一開始被圖4 5 1誤導了,以為是通過兩個陣列來實現 讀完參考鏈結的部落格後,恍然大悟。要點整理如下 在乙個陣列 長度為n 中有兩個棧 陣列的始端和尾端分別是兩個棧的棧底 對於棧底為陣列始端的棧1,插入元素時棧...