• 数据结构学习记录连载7(堆栈提高要求)


    说明:继续实现前面堆栈部分提高要求的功能

    1.SeqStack.h

    /*
    * Copyright (c) 2009,FreshAir团队嵌入式软件研发组
    * All rights reserved.
    *
    * 文件名称:SeqStack.h
    * 摘 要: 顺序堆栈类的定义
    *
    * 当前版本:1.0
    * 作 者: 吴友强
    * 完成日期:2009年10月13日
    *
    * 取代版本:
    * 原作者 :
    * 完成日期:
    */
    #include <iostream.h>
    #include <stdlib.h>

    typedef int DataType;
    const int MaxStackSize = 100;
    class SeqStack 
    {
    private:
     DataType data[MaxStackSize];
     int top;
    public:
     SeqStack();
     virtual ~SeqStack();

     void Push(const DataType &item); //入栈
     DataType Pop(void);     //出栈
     DataType Peek(void) const;  //返回栈顶元素
     int StackIsEmpty(void) const;   //堆栈是否为空
     int GetStackSize(void) const; //返回堆栈的元素个数
     void ClearStack(void);   //清空堆栈
    };

    2.SeqStack.cpp

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

    * 摘 要: 顺序堆栈的实现
    *
    * 当前版本:1.0
    * 作 者: 吴友强
    * 完成日期:2009年10月17日
    *
    * 取代版本:
    * 原作者 :
    * 完成日期:
    */
    #include "SeqStack.h"

    SeqStack::SeqStack()
    {
     top = 0;
    }

    SeqStack::~SeqStack()
    {
    }

    /*
    * 函数名称: Push

    * 输 入: item
    * item: 压入堆栈的数据
    * 输 出:
    * 功能描述: 将item入栈
    * 作 者: 吴友强
    * 日 期: 2009年10月17日
    * 修 改:
    * 日 期:
    */
    void SeqStack::Push(const DataType &item)
    {
     if (top == MaxStackSize)
     {
      cout << "堆栈已满!" << endl;
      exit(0);
     }

     data[top] = item;
     top++;
    }

    DataType SeqStack::Pop(void)
    {
     if (top == 0)
     {
      cout << "堆栈以空!" << endl;
      exit(0);
     }

     top--;
     return data[top];
    }

    DataType SeqStack::Peek(void) const
    {
     if (top == 0)
     {
      cout << "堆栈空!" << endl;
      exit(0);
     }

     return data[top-1];
    }

    int SeqStack::StackIsEmpty(void) const
    {
     return top == 0 ? 1 : 0;
    }

    int SeqStack::GetStackSize(void) const
    {
     return top;
    }

    void SeqStack::ClearStack(void)
    {
     top = 0;
    }

    3.测试程序SeqStackTest.cpp(完成16进制与8进制的相互转换)

    /*
    * Copyright (c) 2009,FreshAir团队嵌入式软件研发组
    * All rights reserved.
    *
    * 文件名称:SeqStackTest.cpp
    * 摘 要: 测试顺序堆栈的功能
    *
    * 当前版本:1.0
    * 作 者: 吴友强
    * 完成日期:2009年10月17日
    *
    * 取代版本:
    * 原作者 :
    * 完成日期:
    */

    #include "SeqStack.h"
    //思路:先把16进制或8进制转化为10进制,在将10进制转化为8进制或16进制
    //输入要求:要求输入的本来就是16进制或8进制,所以对应的输入要求以0x或0开头
    //补充:当然可以直接以10进制的形式输入,只是算法不同而已
    int main()
    {
     SeqStack myStack;
     int jz, num, temp,result;
     result = 0;
     int i, j;
     cout << "请选择输入的是十六进制还是八进制(0,1):" ;
     cin >> jz;

     if (jz == 0)
     {
      cout << "请输入需要转换的16进制数字(以0x开头):";
      cin >> num;
      while (num)
      {
       temp = num % 16;
       myStack.Push(temp);
       num = num / 16;
      }
      for (i=myStack.GetStackSize()-1; i>=0; i--)
      {
       temp = myStack.Pop();
       for (j=0; j<i; j++)
       {
        temp *= 16;
       }
       result += temp;
      }

      num = result;
      result = 0;
      while (num)
      {
       temp = num % 8;
       myStack.Push(temp);
       num = num / 8;
      }
      for (i=myStack.GetStackSize()-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)
     {
      cout << "请输入需要转换的8进制数字(以0开头):";
      cin >> num;
      while (num)
      {
       temp = num % 8;
       myStack.Push(temp);
       num = num / 8;
      }
      myStack.Push(num);
      for (i=myStack.GetStackSize()-1; i>=0; i--)
      {
       temp = myStack.Pop();
       for (j=0; j<i; j++)
       {
        temp *= 8;
       }
       result += temp;
      }

      num = result; 
      while (num)
      {
       temp = num % 16;
       myStack.Push(temp);
       num = num / 16;
      }
      cout << "0x";
      while (!myStack.StackIsEmpty())
      {
       temp = myStack.Pop();
       switch (temp)
       {
       case 0:
       case 1:
       case 2:
       case 3:
       case 4:
       case 5:
       case 6:
       case 7:
       case 8:
       case 9:
        cout << temp;
        break;
       case 10:
        cout << "A";
        break;
       case 11:
        cout << "B";
        break;
       case 12:
        cout << "C";
        break;
       case 13:
        cout << "D";
        break;
       case 14:
        cout << "E";
        break;
       case 15:
        cout << "F";
        break;
       default:
        break;
       }
      }
      cout << endl;
     }
     else
     {
      cout << "输入出错,程序退出!" << endl;
      exit(0);
     }
     return 0;
    }

  • 相关阅读:
    mina:IoBuffer 常用方法(转载)
    js:对象之间的复制
    jquery与angular的交互
    javax.crypto.BadPaddingException: Given final block not properly padded
    jstree:重新加载数据集,刷新树
    TCP 握手 -> 微服务
    eclipse 中添加source
    02 IO
    为什么常用 Map<> map = new HashMap()
    自组织 Self-Orginaztion
  • 原文地址:https://www.cnblogs.com/brucewoo/p/2252046.html
Copyright © 2020-2023  润新知