当前位置: 首页 > news >正文

7.抽象数据类型

7.抽象数据类型

栈由可对它执行的操作来描述:

1、可创建空栈;

2、可将数据项添加到栈顶;

3、可从栈顶删除数据项;

4、可查看栈是否填满;

5、可查看栈是否为空。

将上述描述转换为一个类声明,公有成员函数提供了表示栈操作的接口,私有数据成员负责存储栈数据。

设计一个栈,让它可以存放不同的数据类型,

typedef给类型起别名,以存放不同的数据类型,只需要在这里改就行。

stack.h

#pragma once #ifndef __STACK_H__ #define __STACK_H__ typedef unsigned long Items;//让栈可以存放不同的数据类型,只需要在这里改就行 class Stack { private: static const int MAX = 10; int top;//栈顶指针 Items items[MAX]; public: Stack(); //构造函数,初始化栈顶指针为-1 bool isEmpty() const; //判断栈是否为空 bool isFull() const; //判断栈是否已满 bool push(Items &a); //入栈 bool pop(Items &a); //出栈 }; #endif ​

.

stack.cpp

#include "stack.h" Stack::Stack() { top = 0; // 初始化栈顶指针为0,表示栈为空 } bool Stack::isEmpty() const { if (top == 0) { return true; // 栈为空 } else return false; // 栈非空 } bool Stack::isFull() const { if (top == MAX) { return true; // 栈已满 } else { return false; // 栈未满 } } bool Stack::push(Items& a) { if (top < MAX) { items[top++] = a; // 将元素a压入栈顶 return true; // 入栈成功 } else { return false; // 栈已满,入栈失败 } } bool Stack::pop(Items& a) { if (top > 0) { a = items[--top]; // 将栈顶元素赋值给a return true; } else { return false; // 栈为空,出栈失败 } }

.

project1.cpp

// project1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // ​ #include <iostream> #include "stack.h" #include <cstdlib> #include <string> using namespace std; int main() { std::cout << "Hello World!\n"; char ch; unsigned long a; // 定义一个无符号长整型变量 a Stack stack; // 创建栈对象 //cin >> ch; // 输入字符 ch; cout << "enter A to push to stack,\n" << "P to pop from stack, Q to quit.\n" << endl; while (cin >> ch && toupper(ch) != 'Q') { while (cin.get() != '\n') continue; switch (ch) { case 'A': case 'a': { cout << "Enter a character to push onto the stack: " << endl; cin >> a; // 输入要入栈的字符 if (stack.isFull()) { cout << "stack is already full" << endl; } else { stack.push(a); // 将字符入栈 } break; } case 'p': case 'P': { if (stack.isEmpty()) { cout << "stack is empty" << endl; } else { stack.pop(a); // 将栈顶元素出栈 cout << "poped item is: " << a << endl; // 输出出栈的元素 } break; } } } ​ } ​ // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 ​ // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 ​

00

http://www.gsyq.cn/news/109044.html

相关文章:

  • 小型无人机轻量化且节约成本的几种方法
  • 定制的esp32板子不能正常启动,上电白屏,终极解决方案
  • 31、网络文件系统与集群监控管理
  • ContextMenumanager注册表修改指南:为TensorFlow脚本添加右键执行
  • 初级会计实务第二章真题汇编(含完整选项 + 答案 + 解析)
  • 2025年十大口碑好的考驾照驾校排行榜,新测评精选驾驶证考试 - 工业品牌热点
  • LangFlow构建舆情分析系统的技术路径
  • 巨大的数字计算
  • 鸿蒙Electron跨设备实战:分布式数据流转与实时共享方案
  • 爱查分教师评语推荐,结合成绩数据的温暖个性化点评
  • 22、Bash 脚本高级技巧:代码复用、函数定义与信号处理
  • 35、脚本自动化与bash定制全攻略
  • 基于SpringBoot + Vue的面向大中型校园网的无线AC配置与管理策略演示平台
  • 赋能金融租赁,菊风中标浙银金租视频双录系统项目,打造金融租赁合规运营范式
  • 24.DDL语句使用
  • TOB企业获客软件选型指南:从技术架构与流程设计视角评估可信赖的解决方案
  • 2025年发泡硅胶源头厂家权威推荐榜单:导热硅胶/陶瓷化硅胶泡棉/陶瓷化硅胶布生产厂家精选 - 品牌推荐官
  • 【赵渝强老师】TiDB提供的命令行工具
  • Ubuntu 上安装 MongoDB 并启用事务的完整流程
  • 2025年华北地区玻璃隔断厂推荐:玻璃隔断生产厂家排名与价格 - mypinpai
  • 如何实现300%性能提升?Accelerate分布式推理全攻略
  • 如何提问(How to ask questions the smart way)
  • 新手快速上手动漫生成模型Counterfeit-V2.5
  • 直播 / 录屏推流工具首选!OBS Studio v32.0.2 中文绿色版:修复崩溃 bug,免费无广告还便携
  • 2025抖音代运营公司TOP5权威推荐:抖音代运营套餐哪家便 - 工业品牌热点
  • 2025年靠谱的切削液集中供液/集中供液厂家推荐及选择参考 - 品牌宣传支持者
  • DeepSeek-V2.5:强大多用途语言模型详解
  • 2025年知名的单组分聚脲最新TOP品牌厂家排行 - 品牌宣传支持者
  • 2025年热门的柱塞式液压油缸/摆动式液压油缸高评价厂家推荐榜 - 品牌宣传支持者
  • Ivy框架:打破AI开发壁垒的统一解决方案