news 2026/5/11 8:03:31

7.抽象数据类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 20:23:50

Vue3 - Diff算法理解

Vue 版本&#xff1a;以 vue3.x 代码为参考&#xff0c;主要梳理 diff 算法的核心流程。 Vue 3 的 diff 算法借鉴了纯文本 diff 算法的思想&#xff0c;参考了 viv 和 inferno 框架的实现&#xff0c;只对需要处理的节点本身进行 diff 操作。通过预处理和最长递增子序列&#x…

作者头像 李华
网站建设 2026/5/2 17:34:29

3个颠覆性突破让开源CMS成为中小企业数字化转型的秘密武器

在数字化转型浪潮中&#xff0c;中小企业的IT预算往往捉襟见肘&#xff0c;而Directus作为一款完全开源的内容管理平台&#xff0c;正以零许可成本和高度灵活的技术架构&#xff0c;为预算有限的企业提供了一条全新的数字化路径。这款基于Node.js构建的现代化CMS&#xff0c;不…

作者头像 李华
网站建设 2026/5/3 11:38:48

PapersGPT for Zotero 终极安装指南:5步快速配置AI文献助手

PapersGPT for Zotero 终极安装指南&#xff1a;5步快速配置AI文献助手 【免费下载链接】papersgpt-for-zotero Zotero chat PDF with DeepSeek, GPT, ChatGPT, Claude, Gemini 项目地址: https://gitcode.com/gh_mirrors/pa/papersgpt-for-zotero PapersGPT for Zotero…

作者头像 李华
网站建设 2026/5/8 17:16:51

15-2.【Linux系统编程】进程信号 - 信号保存(信号处理流程的三种状态:未决、阻塞、递达,信号保存由未决表完成、sigset_t信号集类型及相关函数)

目录3. 保存信号-内核通过 “未决信号集” 为每个进程存储已产生但未处理的信号3.1 信号处理流程中的不同状态3.2 信号在内核中的表示3.3 sigset_t信号集类型3.4 信号集操作函数3.4.1 sigprocmask读取或更改进程的信号屏蔽字3.4.2 sigpending读取当前进程的未决信号集3.4.3 综合…

作者头像 李华
网站建设 2026/5/3 22:42:54

31、国际化文本输入方法详解

国际化文本输入方法详解 1. 字体集与字符显示 当 XFontSet 缺少字符集时,每个不可用的字符会使用 XCreateFontSet 返回的默认字符串来绘制。对于无效码点的行为则未作定义。 2. 输入方法概述 输入方法涵盖多个方面,包括输入方法概述、管理、功能、值、输入上下文功能与值…

作者头像 李华
网站建设 2026/5/8 4:11:14

33、本地化与国际化文本函数详解

本地化与国际化文本函数详解 在处理国际化文本输入时,有许多关键的概念和函数需要我们去理解和掌握。下面将详细介绍这些内容,包括输入方法值、输入上下文函数以及输入上下文值等方面。 输入方法相关函数与值 XUnregisterIMInstantiateCallback 函数:该函数用于移除之前…

作者头像 李华