数据结构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. IoC基础篇(一)--- Spring容器中Bean的生命周期

    日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此 ...

  2. Flutter音频播放--chewie_player的基本使用

    发现网络似乎没有关于简单音频播放的插件介绍,这几天找了一下,结果也都不尽人意,最后也是debug一下chewie_player插件的官方demo 先上官方demo图 官方git地址:https://g ...

  3. 利用 esp8266 搭建简单物联网项目

    接上一篇博客,这次还是关于 esp8266 --> 物联网 一.云端数据监控:DHT11 + NodeMcu +Dweet.io 接上一篇博客的接线及相关配置不变( DHT11 + NodeMc ...

  4. 【CF1425A】 Arena of Greed题解

    原题链接 简要翻译: Mr.Chanek与另一个人玩一个取硬币游戏,他先手.玩家在自己的回合内可以取走硬币堆中的一个.如果硬币堆里有偶数个硬币,玩家也可以选择取走硬币总数的一半.两名玩家都是绝对聪明的 ...

  5. 深入理解Callable接口

    Callable接口: Callable,新启线程的一种方式,返回结果并且可能抛出异常的任务,在前面的新启线程的文章中用过,但是没有具体讲解 优点: 可以获取线程的执行结果,也称为返回值 通过与Fut ...

  6. JSON.stringify 的使用

    一.作用:这个函数的作用主要是为了序列化对象.就是把原来是对象的类型转换成字符串类型(json格式的String类型). 二.语法:JSON.stringify(value[, replacer][, ...

  7. c++中 预编译头文件PCH

    转载:https://blog.csdn.net/lovemysea/article/details/74858430 一.预编译头文件使用经验: 如果预编译头文件被正确使用时,它确实大大提高我们编程 ...

  8. CSS中居中的完全指南(中英对照翻译)

    翻译自:https://css-tricks.com/centering-css-complete-guide/ Centering things in CSS is the poster child ...

  9. linux网卡驱动程序架构

    以cs89x0网卡驱动为例:

  10. 如何解决Win7,win8无法使用DOS的Debug:

    如何解决Win7,win8无法使用DOS的Debug: 安装dosbox 将含有程序link,masm,edit,debug的文件夹masm放到d盘根目录 打开dosbox,输入mount c d:\ ...