數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)記錄連載6(堆棧的學(xué)習(xí)續(xù))
說明:繼承鏈表實(shí)現(xiàn)鏈?zhǔn)蕉褩!?/p>
1.LinkStack.h
#include "LinkList.h"
template <class T>
class LinkStack:public LinkList<T>
{
public:
LinkStack();
virtual ~LinkStack();
void Push(const T& item); //元素item入棧
T Pop(void); //出棧元素并返回
T Peek(void) const; //讀棧頂元素并返回
int StackIsEmpty(void) const;
int GetSize(void) const;
void ClearStack(void);
};
2.LinkStack.cpp
/*
* Copyright (c) 2009,FreshAir團(tuán)隊(duì)嵌入式軟件研發(fā)組
* All rights reserved.
*
* 文件名稱:LinkStack.cpp
* 摘 要: 鏈?zhǔn)蕉褩5母鱾€(gè)功能函數(shù)的現(xiàn)實(shí)
*
* 當(dāng)前版本:1.0
* 作 者: 吳友強(qiáng)
* 完成日期:2009年10月16日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "LinkStack.h"
template <class T>
LinkStack<T>::LinkStack()
{
}
template <class T>
LinkStack<T>::~LinkStack()
{
}
template <class T>
void LinkStack<T>::Push(const T& item) //元素item入棧
{
Insert(item, GetListSize());
}
template <class T>
T LinkStack<T>::Pop(void) //出棧元素并返回
{
if (GetListSize() == 0)
{
cout << "堆棧以空!" << endl;
exit(0);
}
return Delete(GetListSize() - 1);
}
template <class T>
T LinkStack<T>::Peek(void) const //讀棧頂元素并返回
{
if (GetListSize() == 0)
{
cout << "堆棧以空!" << endl;
exit(0);
}
return GetData(GetListSize() - 1);
}
template <class T>
int LinkStack<T>::StackIsEmpty(void) const
{
return ListIsEmpty();
}
template <class T>
int LinkStack<T>::GetSize(void) const
{
return GetListSize();
}
template <class T>
void LinkStack<T>::ClearStack(void)
{
ClearList();
}
3.LinkListTest.cpp
/*
* Copyright (c) 2009,FreshAir團(tuán)隊(duì)嵌入式軟件研發(fā)組
* All rights reserved.
*
* 文件名稱:LinkListTest.cpp
* 摘 要: 測試程序-10進(jìn)制和8進(jìn)制的相互轉(zhuǎn)化
*
* 當(dāng)前版本:1.0
* 作 者: 吳友強(qiáng)
* 完成日期:2009年10月16日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <iostream.h>
#include <stdlib.h>
#include "LinkStack.h"
int main(int argc, char *argv[])
{
LinkStack<int> myStack;
int jz, num, temp,result;
result = 0;
int i, j;
cout << "請選擇輸入的是十進(jìn)制還是八進(jìn)制(0,1):" ;
cin >> jz;
cout << "請輸入需要轉(zhuǎn)換的數(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.GetListSize()-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.GetListSize()-1; i>=0; i--)
{
temp = myStack.Pop();
for (j=0; j<i; j++)
{
temp *= 8;
}
result += temp;
}
cout << "result is: " << result << endl;
}
else
{
cout << "輸入出錯(cuò),程序退出!" << endl;
exit(0);
}
return 0;
}
浙公網(wǎng)安備 33010602011771號