思想:先開闢一段連續的儲存空間(乙個陣列);兩個棧棧頂分別指向陣列的兩端,隨著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,插入元素時棧...