/*
請定義一個類別,用來表現整數的push-down堆疊。堆疊是一串項目,只允許
從一端加入資料(pushing)或移出資料(popping),也就是支援後進先出
(last-in, first-out)的機制。此類別應有push()和pop()兩個函式,再加上
檢查堆疊內容的print()函式和想看堆疊最頂端資料又不想將它移出的peek()
函式。撰寫一個測試程式來檢驗類別是否能正確的運作。
*/
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
class CHeap
{
public:
static int setting; //指位置用
CHeap(int insert = 0) //讓輸入的數字能在類別裡運作,insert是輸入的數字
{
value = insert;
}
void push() //把輸入的數字丟到陣列最後面
{
heap[setting] = value;
setting++; //把輸入值填入陣列後,準備填下一個位置
}
void pop() //把陣列最後面的數字砍掉
{
setting--; //直接往前移
}
void peek() //印出陣列最後面的數字
{
int x = setting - 1; //因為setting會比真實的陣列尾多1,所以要扣回去
cout << heap[x] << endl;
}
void print() //由後往前印出陣列的所有數字
{
for(int i = (setting - 1); i >= 0; i--)
{
cout << heap[i] << " ";
}
}
private:
int heap[80]; //準備存放資料的陣列
int value; //要加進去的數字
};
int CHeap::setting = 0;
int main(void)
{
cout << "請選擇以下項目:" << endl
<< "1.從最前面輸入數字 " << "2.砍掉最前面的數字 " << "3.看最前面的數字 " << "4.印出所有數字 " << "5.結束" << endl;
int select; //選項
cin >> select;
cout << endl;
while(select == 1 || select == 2 || select == 3 || select == 4 || select == 5)
{
switch(select)
{
case 1:
{
cout << "請輸入數字:";
int input;
cin >> input;
cout << endl;
CHeap insert(input); //有問題的地方
insert.push();
break;
}
case 2:
{
CHeap remove(0); //有問題的地方
remove.pop();
cout << endl;
break;
}
case 3:
{
CHeap lookfront(0); //有問題的地方
lookfront.peek();
cout << endl;
break;
}
case 4:
{
CHeap showall(0); //有問題的地方
showall.print();
cout << endl;
break;
}
default:
break;
}
if(select == 5)
break;
cout << "請選擇以下項目:" << endl
<< "1.從最前面輸入數字 " << "2.砍掉最前面的數字 " << "3.看最前面的數字 " << "4.印出所有數字 " << "5.結束" << endl;
cin >> select;
cout << endl;
}
return 0;
}