数据结构学习记录连载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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔷薇理想人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值