【C++】使用类实现抽象数据类型(Abstract Data Type, ADT)

举报
王博Kings 发表于 2020/12/30 01:27:18 2020/12/30
【摘要】 类通常表示更加通用的概念 ADT使用通用的方式描述数据类型,而没有引入语言或实现细节 比如栈: 创建空栈从栈顶添加数据从栈顶删除数据栈是否满栈是否空 stack.h //stack.h -- 堆栈的类定义实现#ifndef STACK_H_#define STACK_H_ typedef unsigned long Item; class Stack{public: ...

类通常表示更加通用的概念

ADT使用通用的方式描述数据类型,而没有引入语言或实现细节

比如栈:

  • 创建空栈
  • 从栈顶添加数据
  • 从栈顶删除数据
  • 栈是否满
  • 栈是否空

stack.h


  
  1. //stack.h -- 堆栈的类定义实现
  2. #ifndef STACK_H_
  3. #define STACK_H_
  4. typedef unsigned long Item;
  5. class Stack
  6. {
  7. public:
  8. Stack();
  9. bool isempty() const;
  10. bool isfull() const;
  11. // push()如果满了就返回错误,否则返回正确
  12. bool push(const Item & item);
  13. // pop()如果是空就返回错误
  14. bool pop(Item & item);
  15. private:
  16. enum //注意这里的枚举
  17. {
  18. MAX = 10
  19. };
  20. Item items[MAX];
  21. int top;
  22. };
  23. #endif

stack.cpp


  
  1. //stack.cpp -- 类成员函数的定义
  2. #include"stack.h"
  3. Stack::Stack()//创建空的堆栈
  4. {
  5. top = 0;
  6. }
  7. bool Stack::isempty() const
  8. {
  9. return top == 0;
  10. }
  11. bool Stack::isfull() const
  12. {
  13. return top == MAX;
  14. }
  15. bool Stack::push(const Item & item)
  16. {
  17. if (top<MAX)
  18. {
  19. items[top++] = item;
  20. return true;
  21. }
  22. else
  23. {
  24. return false;
  25. }
  26. }
  27. bool Stack::pop(Item & item)
  28. {
  29. if (top>0)
  30. {
  31. item = items[--top];
  32. return true;
  33. }
  34. else
  35. {
  36. return false;
  37. }
  38. }

stacker.cpp


  
  1. //stacker.cpp -- 测试堆栈的类
  2. #include<iostream>
  3. #include<cctype>
  4. #include"stack.h"
  5. int main()
  6. {
  7. using namespace std;
  8. //创建空的堆栈
  9. Stack st;
  10. char ch;
  11. unsigned long po;
  12. cout << "请输入 A 添加,\n"
  13. << "P 等价于PO,Q表示退出\n\n" << endl;
  14. while (cin >> ch && toupper(ch) != 'Q')
  15. {
  16. while (cin.get() != '\n')
  17. continue;
  18. if (!isalpha(ch))
  19. {
  20. cout << '\a';
  21. continue;
  22. }
  23. switch (ch)
  24. {
  25. case 'A':
  26. case 'a':
  27. cout << "输入 一个PO数字加入:";
  28. cin >> po;
  29. if (st.isfull())
  30. {
  31. cout << "老铁,堆栈满了啊,加不进去\n";
  32. }
  33. else
  34. {
  35. st.push(po);
  36. }
  37. break;
  38. case 'p':
  39. case 'P':
  40. if (st.isempty())
  41. {
  42. cout << "老哥,你一直删除,都没东西了已经\n";
  43. }
  44. else
  45. {
  46. st.pop(po);
  47. cout << "PO # " << po << "被删了" << endl;
  48. }
  49. default:
  50. break;
  51. }
  52. cout << "请输入 A 添加,\n"
  53. << "P 等价于PO,Q表示退出\n\n" << endl;
  54. }
  55. cout << "再见了,不想在看到你!\n";
  56. return 0;
  57. }

程序运行结果

请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:1
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:2
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:3
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:4
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:5
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:6
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:7
请输入  A  添加,
P 等价于PO,Q表示退出


A8
输入 一个PO数字加入:8
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:9
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:10
请输入  A  添加,
P 等价于PO,Q表示退出


A
输入 一个PO数字加入:11
老铁,堆栈满了啊,加不进去
请输入  A  添加,
P 等价于PO,Q表示退出


P
PO # 10被删了
请输入  A  添加,
P 等价于PO,Q表示退出


p
PO # 9被删了
请输入  A  添加,
P 等价于PO,Q表示退出


P
PO # 8被删了
请输入  A  添加,
P 等价于PO,Q表示退出


P
PO # 7被删了
请输入  A  添加,
P 等价于PO,Q表示退出


Q
再见了,不想在看到你!
请按任意键继续. . .

 

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/98962704

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。