数据结构c++实现系列第一篇。

话不多说,直接上代码。

sichstack.h (头文件)

 1 #pragma once
2 #include<string>
3
4 namespace sichdc {
5
6 class SStack {
7
8 private:
9
10 // 与栈本身的实现无关
11 // 仅用来标识对象
12 std::string name;
13
14 static const int cap = 3; // 栈的容量
15 int stack[cap]; // 存储数据的数组
16 int top; // 栈顶指针
17
18 public:
19 SStack(std::string n);
20
21 bool IsEmpty(); // 检查栈是否为空
22 bool IsFull(); // 检查栈是否为满
23
24 bool Push(int i); // 压栈
25 bool Pop(); // 弹出栈顶元素
26
27 // 非必要方法
28 int GetTop(); // 返回栈顶元素
29 void ShowSize(); // 显示栈当前大小
30 };
31
32 class SStackTest {
33
34 public:
35 void Test();
36 };
37 }

sichstack.cpp (头文件的实现)

  1 #include"sichstack.h"
2 #include<iostream>
3
4 namespace sichdc {
5
6 SStack::SStack(std::string n) {
7
8 name = n;
9
10 for (int i = 0; i < cap; ++i) {
11
12 stack[i] = 0;
13 }
14 top = 0;
15 }
16 bool SStack::IsEmpty() { return top == 0; }
17 bool SStack::IsFull() { return top == cap; }
18 bool SStack::Push(int i) {
19
20 if (IsFull()) { return false; }
21
22 stack[top] = i;
23 top++;
24 return true;
25 }
26 bool SStack::Pop() {
27
28 if (IsEmpty()) { return false; }
29
30 top--;
31 return true;
32 }
33 int SStack::GetTop(){
34
35 // 如果栈为空则返回特殊值-1
36 if (IsEmpty()) { return -1; }
37
38 return stack[top - 1];
39 }
40 void SStack::ShowSize() {
41
42 std::cout << "栈 " << name << " 当前的大小为: " << top << std::endl;
43 }
44
45 void SStackTest::Test() {
46
47 using namespace std;
48
49 SStack ss{"ss"};
50
51 string cmd{}; // 用于接受用户命令
52 int n{}; // 用于接收用户数据
53
54 cout << "_> ";
55 cin >> cmd;
56 while (cmd != "退出") {
57
58 if (cmd == "空栈") {
59
60 cout << (ss.IsEmpty() ? "空栈" : "非空栈") << "\n" << endl;
61 }
62 else if (cmd == "满栈") {
63
64 cout << (ss.IsFull() ? "满栈" : "非满栈") << "\n" << endl;
65 }
66 else if (cmd == "栈大小") {
67
68 ss.ShowSize();
69 cout << endl;
70 }
71 else if (cmd == "压栈") {
72
73 cout << "输入数据:";
74 cin >> n;
75 cout << ss.Push(n) << "\n" << endl;
76 }
77 else if (cmd == "弹出") {
78
79 cout << ss.Pop() << "\n" << endl;
80 }
81 else if (cmd == "读取") {
82
83 cout << ss.GetTop() << "\n" << endl;
84 }
85 else if (cmd == "检查") {
86
87 SStack ss1{ "ss1" };
88
89 while (!ss.IsEmpty()) {
90
91 int t = ss.GetTop();
92 ss1.Push(t);
93 ss.Pop();
94 }
95
96 while (!ss1.IsEmpty()) {
97
98 int t = ss1.GetTop();
99 cout << t << ", ";
100 ss.Push(t);
101 ss1.Pop();
102 }
103
104 cout << "\n" << endl;
105 }
106 else {
107
108 cout << "不支持当前命令!" << "\n" << endl;
109 }
110
111 cout << "_> ";
112 cin >> cmd;
113 }
114 }
115 }

源.cpp (main函数,测试用)

 1 #include"sichstack.h"
2 #include<iostream>
3
4 int main() {
5
6 using namespace std;
7 using sichdc::SStackTest;
8
9 cout << "## 程序开始 ##\n";
10
11 SStackTest sst{};
12 sst.Test();
13
14 cout << "## 程序结束 ##\n";
15 return 0;
16 }

总结:

代码是分别写在不同的文件里写的,我个人比较喜欢这种有条理的代码组织方式。

简单介绍一下代码结构:

头文件sichstack.h里在一个命名空间写了两个类,一个栈的实现类,一个栈的测试类。

实现文件sichstack.cpp实现了这两个类。

源.cpp里进行测试。

整个数据结构的实现没有用到STL里封装好的高级数据结构,都是最底层的实现。

栈的C++实现的更多相关文章

  1. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  2. Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

    --reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...

  3. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  4. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  5. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  6. BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]

    4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discu ...

  7. BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1054[Submit][Status ...

  8. .NET全栈开发工程师学习路径

    PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...

  9. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  10. 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置

    0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...

随机推荐

  1. 刷题[WUSTCTF2020]朴实无华

    解题思路 打开是一个这样的页面,查看源码发现什么人间极乐bot,试试是不是robots.txt,查看发现类似flag文件,查看发现是假的flag,但是burp抓包后发现,返回的头部有信息 源码出来了, ...

  2. 虚拟机CentOS开机黑屏解决方案

    默认配置 错误: 1.直接就是黑屏,连杠杠都没有 2.centos系统关不掉 3.关闭vmware提示:虚拟机XXX繁忙 解决方案一: 1.以管理员身份运行cmd控制台程序 2.在cmd窗口中输入ne ...

  3. visual studio 2015 安装MSDN全称Microsoft Developer Network 安装离线的MSDN

    MSDN: 微软向开发人员提供的一套帮助系统,其中包含大量的开发文档,技术文章和示例代码. 这里介绍了vs2015 装离线的MSDN(说明一点是,如果不行,说明你的文件有缺陷,没安装好,之前我用vs2 ...

  4. 【题解】[CH弱省胡策R2]TATT

    本蒟蒻第一道\(K-D-Tree\)维护\(dp\) Question 题目大意:求一条路径,使得其四个维度单调不降. 先排序消掉一维再说. 对于每一个点,初始的时候绝对长度是1啊.于是,先赋值一个1 ...

  5. 最新vue项目添加水印

    在utils文件夹中创建 wartermark.ts 文件(位置看自己的组件放那,这都行),内容如下: 1 "use strict"; 2 3 const setWatermark ...

  6. str常用操作方法

    1. 索引(即下标) s = 'ABCDEFGHIJKLMN' s1 = s[0] print('s[0] = ' + s1) #s[0] = A print('s[3] = '+ s[3]) #s[ ...

  7. golang执行exec命令

    创建对象: cmd, err := exec.Command("echo", "show me")   执行命令: cmd.Run()  //Run 阻塞进程, ...

  8. java流程控制学习

    Java流程控制 计算的步骤就是算法. 1.用户交互Scanner next()不能得到带有空格的字符串.[它是以空格为结束符]nextline()可以,[它是以回车为结束符] 2.顺序结构 从上到下 ...

  9. vs code C语言环境搭建

    最近重温C语言,因为很多练习只是小程序,并不需要Clion和Codeblocks这样工程导向的编译软件,所以下载了vs code,并试图搜索相应的环境,在此过程中发现,网上许多vs code 的c/c ...

  10. 推荐算法之: DeepFM及使用DeepCTR测试

    算法介绍 左边deep network,右边FM,所以叫deepFM 包含两个部分: Part1: FM(Factorization machines),因子分解机部分 在传统的一阶线性回归之上,加了 ...