数据结构学习记录连载6(堆栈的学习续)
说明:继承链表实现链式堆栈。
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团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:LinkStack.cpp
* 摘 要: 链式堆栈的各个功能函数的现实
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期: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团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:LinkListTest.cpp
* 摘 要: 测试程序-10进制和8进制的相互转化
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期: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 << "请选择输入的是十进制还是八进制(0,1):" ;
cin >> jz;
cout << "请输入需要转换的数字:";
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 << "输入出错,程序退出!" << endl;
exit(0);
}
return 0;
}