資料結構實驗(4)
資料結構實驗
PS:僅資料結構實驗記錄
題目:設計兩個棧 S1、S2 都採用順序棧方式,並且共享一個儲存區[0,MaxLen-1],為了儘量利用空間,減少溢位的可能,可採用棧頂相向、迎面增長的儲存方式,如圖所示。設計一個有關棧的入棧和出棧演算法。
#include<iostream>
using namespace std;
const int MaxLen = 50;
template <typename DataType>
class Dou_Stack
{
public:
Dou_Stack(); //建構函式
~Dou_Stack() {} //解構函式
void En_Stack(DataType x, int i); //入棧操作
DataType De_Stack(); //出棧操作
void Gethead(); //取棧頂元素
private:
DataType data[MaxLen];
int top1;
int top2;
};
template <typename DataType>
Dou_Stack<DataType>::Dou_Stack() //建構函式
{
top1 = -1; //S1棧頂元素下標
top2 = MaxLen; //S2棧頂元素下標
}
template <typename DataType>
void Dou_Stack<DataType>::En_Stack(DataType x, int i) //入棧操作
{
if (top1 < top2)
{
if( i == 1 )
data[++top1] = x;
else
{
if (i == 2)
data[--top2] = x;
else
throw "插入位置有誤";
}
}
else
throw "插入位置有誤";
}
template <typename DataType>
DataType Dou_Stack<DataType>::De_Stack() //出棧操作
{
int i;
DataType x;
cout << "\n請輸入要進行出棧操作的棧(1為S1棧,2為S2棧):";
cin >> i;
if (i == 1)
{
if (top1 == -1)
throw "下溢";
else
{
x = data[top1];
top1--;
cout << "S1棧頂元素 " << x << " 出棧成功" << endl;
return x;
}
}
else
{
if (i == 2)
{
if (top2 == MaxLen)
throw "上溢";
else
{
x = data[top2];
top2++;
cout << "S1棧頂元素 " << x << " 出棧成功" << endl;
return x;
}
}
else
throw "刪除位置有誤";
}
}
template <typename DataType>
void Dou_Stack<DataType>::Gethead()
{
if (top1 != -1)
{
cout << "\n棧S1的棧頂元素為:" << data[top1] ;
}
else
cout << "棧1為空";
cout << endl;
if (top2 != -MaxLen)
{
cout << "棧S2的棧頂元素為:" << data[top2];
}
else
cout << "棧1為空";
cout << endl;
}
//測試函式
int main()
{
Dou_Stack<int> D;
int a1[5] = { 1, 3, 5, 7 ,9 };
int a2[5] = { 2 ,4, 6, 8 ,10 };
cout << "將陣列a1,a2分別入棧S1,S2:";
try
{
for (int i = 0; i < 5; i++)
{
int j = a1[i];
int k = a2[i];
D.En_Stack(j, 1);
D.En_Stack(k, 2);
}
D.Gethead();
D.De_Stack();
D.Gethead();
D.De_Stack();
D.Gethead();
}
catch (char* str)
{
cout << str << endl;
}
}
相關文章
- 資料結構實驗1資料結構
- 資料結構實驗課五-1資料結構
- 資料結構實驗三 2024_樹與圖實驗資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 資料結構實驗:連結串列的應用資料結構
- 資料結構實驗之連結串列八:Farey序列資料結構
- 資料結構實驗 多維陣列的實現資料結構陣列
- 資料結構實驗 二維矩陣的實現資料結構矩陣
- 《資料結構》實驗08--樹及其應用資料結構
- 資料結構,雜湊表hash設計實驗資料結構
- 信管117128許盛迪資料結構實驗一資料結構
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- (C++)資料結構實驗二——迷宮問題C++資料結構
- 資料結構實驗5、鏈佇列的基本操作資料結構佇列
- 資料結構實驗之連結串列三:連結串列的逆置資料結構
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構實驗之連結串列六:有序連結串列的建立資料結構
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 資料結構實驗之連結串列四:有序連結串列的歸併資料結構
- 資料結構基礎第4講資料結構
- 演算法(4)資料結構:堆演算法資料結構
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 資料結構 實驗六(二叉排序樹字元統計)資料結構排序字元
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- F - 資料結構實驗之圖論六:村村通公路資料結構圖論
- Java實現資料結構之線性結構Java資料結構
- MaxCompute讀取分析OSS非結構化資料的實踐經驗總結
- 結構化資料、半結構化資料和非結構化資料
- 資料結構3-4周總結(1) 基本操作資料結構
- 資料結構--LinkedList的實現資料結構
- js實現資料結構--棧JS資料結構
- redis資料結構實現(一)Redis資料結構
- javascript 資料型態/結構驗證庫 : SkeletonsJavaScript
- 資料結構實驗之查詢七:線性之雜湊表資料結構
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 【資料結構篇】認識資料結構資料結構
- Redis內部資料結構詳解(4)——ziplistRedis資料結構