数据结构学习记录连载5(堆栈的学习)

基本要求:

1)用继承顺序表类SeqList的方法建立顺序栈类SeqStack,编写程序实现十进制数和八进制数的转换;

2)用继承链表类LinList的方法建立顺序栈类LinStack,编写程序实现十进制数和八进制数的转换;

提高要求:

1)直接类定义和实现方法建立顺序栈类SeqStack,编写程序实现十六进制数和八进制数的转换。

2)直接类定义和实现方法建立顺序栈类LinStack,编写程序实现十六制数和八进制数的转换。

说明:基本要求是用继承的方式,前面的文章给出了被继承的类,这里只给出完整的堆栈实现。

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的实现代码

/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqStack.cpp

* 摘 要:顺序堆栈的实现
*
* 当前版本: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
{
returnGetListSize();
}

void SeqStack::ClearStack(void)
{
ClearList();
}

3.SeqListTest.cpp完成10进制与8进制的相互转化

/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* 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 << "请输入需要转换的数字:";
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;
}

<!--EndFragment-->

你可能感兴趣的:(数据结构)