1. #define StackSize 100
  2. typedef char DataType;
  3.  
  4. class stack
  5. {
  6. public:
  7. DataType data[StackSize];
  8. int top;
  9.  
  10. void Initial();
  11. bool IsEmpty();
  12. bool IsFull();
  13. void Push(DataType x);
  14. DataType Pop();
  15. DataType Top();
  16. };
  17. stack.cpp
  18. #include "stack.h"
  19. #include <iostream>
  20. using namespace std;
  21.  
  22. void stack::Initial()
  23. {
  24. top = -1;
  25. }
  26.  
  27. bool stack::IsEmpty()
  28. {
  29. return top == -1;
  30. }
  31.  
  32. bool stack::IsFull()
  33. {
  34. return top == StackSize -1;
  35. }
  36.  
  37. void stack::Push(DataType x)
  38. {
  39. if(IsFull() == true )
  40. {
  41. cout<< "栈?已??满??" <<endl;
  42. }
  43. else
  44. {
  45. top++;
  46. data[top] = x;
  47. }
  48. }
  49.  
  50. DataType stack::Pop()
  51. {
  52. if(IsEmpty() == true )
  53. {
  54. cout<< "栈?为a空?" <<endl;
  55. }
  56. else
  57. {
  58. DataType temp;
  59. temp = data[top];
  60. top--;
  61. return temp;
  62. }
  63. }
  64.  
  65. DataType stack::Top()
  66. {
  67. if(IsEmpty() == true )
  68. {
  69. cout<< "栈?为a空?" <<endl;
  70. }
  71. else
  72. {
  73. DataType temp;
  74. temp = data[top];
  75. return temp;
  76. }
  77. }
  78.  
  79. LinkStack.h
  80. typedef char DataType;
  81. typedef struct node
  82. {
  83. DataType data;
  84. struct node *next;
  85. }StackNode;
  86. class LinkStack
  87. {
  88. public:
  89. StackNode *top;
  90.  
  91. void Initial();
  92. bool IsEmpty();
  93. void Push(DataType x);
  94. DataType Pop();
  95. DataType Top();
  96.  
  97. };
  98.  
  99. LinkStack.cpp
  100. #include "LinkStack.h"
  101. #include <iostream>
  102. using namespace std;
  103.  
  104. void LinkStack::Initial()
  105. {
  106. top = NULL;
  107. }
  108. bool LinkStack::IsEmpty()
  109. {
  110. return top == NULL;
  111. }
  112. void LinkStack::Push(DataType x)
  113. {
  114. StackNode *temp=(StackNode *)malloc( sizeof(StackNode)); //不?可??以??直??接??StackNode *temp;
  115. temp->data = x;
  116. temp->next = NULL;
  117. //注???意?a栈?的??插?入?? 指?针?指?向??方??式??
  118. temp->next = top;
  119. top = temp;
  120. }
  121.  
  122. DataType LinkStack::Pop()
  123. {
  124. DataType x;
  125. StackNode *temp = top; //保???留??栈?顶??指?针?
  126. if(IsEmpty())
  127. {
  128. cout<< "栈?为a空?" <<endl;
  129. }
  130. else
  131. {
  132. x = temp->data;
  133. top = temp->next;
  134. free(temp);
  135. return x;
  136. }
  137. }
  138. DataType LinkStack::Top()
  139. {
  140. DataType x;
  141. StackNode *temp = top; //保???留??栈?顶??指?针?
  142. if(IsEmpty())
  143. {
  144. cout<< "栈?为a空?" <<endl;
  145. }
  146. else
  147. {
  148. x = temp->data;
  149. return x;
  150. }
  151. }
  152.  
  153. main.cpp
  154. #include <stdio.h>
  155. #include <iostream>
  156. #include "stack.h"
  157. #include "LinkStack.h"
  158. using namespace std;
  159.  
  160. int main()
  161. {
  162. //printf("Hello\n");
  163. //stack mystack;
  164. //mystack.Initial();
  165. //mystack.Push('a');
  166. //cout<<mystack.Top()<<endl;
  167. //mystack.Push('b');
  168. //cout<<mystack.Top()<<endl;
  169. //cout<<mystack.Pop()<<endl;
  170. //cout<<mystack.Pop()<<endl;
  171. //mystack.Pop();
  172.  
  173. LinkStack mylinkstack;
  174. mylinkstack.Initial();
  175. mylinkstack.Push( 'x');
  176.  
  177. cout<<mylinkstack.Top()<<endl;
  178. mylinkstack.Push( 'y');
  179. cout<<mylinkstack.Top()<<endl;
  180. cout<<mylinkstack.Pop()<<endl;
  181. cout<<mylinkstack.Pop()<<endl;
  182. mylinkstack.Pop();
  183. return 0;
  184. }

  

数据结构自己实现——stack的更多相关文章

  1. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  2. C++数据结构之Linked Stack(链式栈)

    上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...

  3. 数据结构学习笔记——stack实现(数组篇)

    一 栈:是一种表,限制插入和删除只能在一个位置,也即是表的末端(也是栈的顶)进行. 基本操作:push 和 pop. 二 栈的数组实现: 运用数组来存储元素,和栈操作先关的是theArray(一个数组 ...

  4. Python数据结构应用1——Stack

    Reference: Problem Solving with Algorithms and Data Structures, Release 3.0 自学一下数据结构,学完之后刷leetcode,使 ...

  5. 数据结构11: 栈(Stack)的概念和应用及C语言实现

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...

  6. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  7. java数据结构——栈(Stack)

    学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...

  8. 数据结构 -- 栈(Stack)

    一.栈的简介 定义 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据 ...

  9. 第二十三篇 玩转数据结构——栈(Stack)

          1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...

  10. 数据结构之栈(Stack)

    什么是栈(Stack) 栈是一种遵循特定操作顺序的线性数据结构,遵循的顺序是先进后出(FILO:First In Last Out)或者后进先出(LIFO:Last In First Out). 比如 ...

随机推荐

  1. Java 多线程同步生产者消费者问题-monitor

    对这个问题更深一点理解是,每一个线程都在竞争这个类的实例的monitor对象. java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronized methods ...

  2. Re:从零开始的Linux之路(目录配置)

    基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 FHS协议(Filesystem Hierarchy Standard)——文件系统层次化标准 该标准定义了 ...

  3. 在物理机上,用U盘安装esxi虚拟化环境

    一般使用U盘安装centos镜像,可使用镜像刻录工具UltraISO,详细方法参照如下链接: https://jingyan.baidu.com/article/647f0115ee55ba7f214 ...

  4. 基于网站地址URL传输session信息

    在php的学习中,会话是我们常常用到的,那今天我们就来详细讲讲会话中的session: 一.session的工作机制:当开启session后,服务器会在服务器中保存session文件,然后再浏览器保存 ...

  5. day13-生成器

    def generator(): print(1) yield 'a' rcp = generator() print(rcp.__next__()) 只要含有yield关键字的函数都是生成器函数.y ...

  6. Python学习笔记:open函数和with临时运行环境(文件操作)

    open函数 1.open函数: file=open(filename, encoding='utf-8'),open()函数是Python内置的用于对文件的读写操作,返回的是文件的流对象(而不是文件 ...

  7. 在SCIKIT中做PCA 逆变换 -- 新旧特征转换

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  8. atag信息处理

    machine_desc->boot_params参数保存的是u-boot传入的启动参数的地址,如果没有传入启动参数,使用如下的默认参数: /* * This holds our default ...

  9. Eclipse设置C++自动补全变量名快捷键

    用快捷键:Alt+/ 要是还是有些场合不能提示,按照下列步骤 Window-Preferences-c/c++-Editor-Content Assist-Advanced 将未勾选的全部勾选

  10. python - log日志

    # -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_logging.py @ide: PyCharm Comm ...