數(shù)據(jù)結構學習記錄連載5(堆棧的學習)
基本要求:
1) 用繼承順序表類SeqList的方法建立順序棧類SeqStack,編寫程序實現(xiàn)十進制數(shù)和八進制數(shù)的轉換;
2) 用繼承鏈表類LinList的方法建立順序棧類LinStack,編寫程序實現(xiàn)十進制數(shù)和八進制數(shù)的轉換;
提高要求:
1) 用直接類定義和實現(xiàn)方法建立順序棧類SeqStack,編寫程序實現(xiàn)十六進制數(shù)和八進制數(shù)的轉換。
2) 用直接類定義和實現(xiàn)方法建立順序棧類LinStack,編寫程序實現(xiàn)十六制數(shù)和八進制數(shù)的轉換。
說明:基本要求是用繼承的方式,前面的文章給出了被繼承的類,這里只給出完整的堆棧實現(xiàn)。
1.SeqStack.h的代碼:
#include "SeqList.h"
class SeqStack : private SeqList
{
public:
SeqStack();
virtual ~SeqStack();
void Push(const DataType& item); //元素item入棧
DataType Pop(void); //出棧元素并返回
DataType Peek(void) const; //讀棧頂元素并返回
int StackEmpty(void) const;
int GetSize(void) const;
void ClearStack(void);
};
2.SeqStack.cpp的實現(xiàn)代碼
/*
* Copyright (c) 2009,FreshAir團隊嵌入式軟件研發(fā)組
* All rights reserved.
*
* 文件名稱:SeqStack.cpp
* 摘 要: 順序堆棧的實現(xiàn)
*
* 當前版本:1.0
* 作 者: 吳友強
* 完成日期:2009年10月16日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "SeqStack.h"
SeqStack::SeqStack()
{
SeqList();
}
SeqStack::~SeqStack()
{
}
void SeqStack::Push(const DataType& item) //元素item入棧
{
if (GetListSize() == MaxListSize)
{
cout << "堆棧已滿!" << endl;
exit(0);
}
Insert(item, GetListSize());
}
DataType SeqStack::Pop(void) //出棧元素并返回
{
if (GetListSize() == 0)
{
cout << "堆棧以空!" << endl;
exit(0);
}
return Delete(GetListSize() - 1);
}
DataType SeqStack::Peek(void) const //讀棧頂元素并返回
{
return GetData(GetListSize() - 1);
}
int SeqStack::StackEmpty(void) const
{
return ListIsEmpty();
}
int SeqStack::GetSize(void) const
{
return GetListSize();
}
void SeqStack::ClearStack(void)
{
ClearList();
}
3.SeqListTest.cpp完成10進制與8進制的相互轉化
/*
* Copyright (c) 2009,FreshAir團隊嵌入式軟件研發(fā)組
* All rights reserved.
*
* 文件名稱:SeqListTest.cpp
* 摘 要: 完成10進制和8進制的相互轉換
*
* 當前版本:1.0
* 作 者: 吳友強
* 完成日期:2009年10月16日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "SeqStack.h"
int main(int argc, char *argv[])
{
SeqStack myStack;
int jz, num, temp, result;
result = 0;
int i, j;
cout << "請選擇輸入的是十進制還是八進制(0,1):" ;
cin >> jz;
cout << "請輸入需要轉換的數(shù)字:";
cin >> num;
if (jz == 0)
{
while (num / 8 != 0)
{
temp = num % 8;
myStack.Push(temp);
num = num / 8;
}
myStack.Push(num); //將最高位也入棧
for (i=myStack.GetSize()-1; i>=0; i--)
{
temp = myStack.Pop();
for (j=0; j<i; j++)
{
temp *= 10;
}
result += temp;
}
cout << "result is: 0" << result << endl;
}
else if (jz == 1)
{
while (num / 10 != 0)
{
temp = num % 10;
myStack.Push(temp);
num = num / 10;
}
myStack.Push(num);
for (i=myStack.GetSize()-1; i>=0; i--)
{
temp = myStack.Pop();
for (j=0; j<i; j++)
{
temp *= 8;
}
result += temp;
}
cout << "result is: " << result << endl;
}
else
{
cout << "輸入出錯,程序退出!" << endl;
exit(0);
}
return 0;
}
浙公網(wǎng)安備 33010602011771號