定义:

栈是一种只能在某一端插入和删除数据的特殊线性表。他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出)。因此栈也称先进后出表。

允许进行插入删除操作的一端称为栈顶,另一端称为栈底。栈底固定,栈顶浮动。插入元素称为进栈,删除一个元素称为进栈,栈内元素为零称为空栈。

我们今天讲一下STL(标准模板库)的栈,和自己实现的栈(顺序栈,链式栈)

先说STL的栈 stack

stack成员函数:

bool empty ( ) ————>栈为空返回true,否则返回false;

void pop ( ) ————>删除栈顶元素,出栈;

void push(const TYPE&value)————> 插入新元素value,放置在栈顶进栈;TYPE:类型int,char…;

size_type size ( ) ————> 返回堆栈中元素个数;(注意注意!!!!切不可赋值给int ,很容易超过int的范围

TYPE&top()————> 查看当前栈顶元素;

注:TYPE取决于声明的类型

stack声明:

stack<TYPE>demo;

格式stack<类型(int double char....)> 名字

stack函数调用:

  1. stack<type> demo;//type可以是int可以是double也可以自定义数据类型
  2. demo.push(val); //返回值void
  3. demo.empty();//返回值为bool代表是否为空
  4. demo.size();//返回栈内元素数量
  5. demo.pop();//栈顶出栈
  6. demo.top();//取出栈顶元素

自己写的顺序栈

一般都是类内声明了,类外定义,但是为了给大家直观的感受,我就写里面了,其次getTop的函数本来应该是返回top值但是鉴于每次去之前都需要判断是不是为空,就改成了我代码里的样子;

  1. #include <iostream>
  2. #define MaxSize 5000
  3. using namespace std;
  4. template <typename T>
  5. class Stack
  6. {
  7. T data[MaxSize];
  8. int top;
  9. public:
  10. void InitStack( )
  11. {
  12. top = -1;
  13. }
  14. bool StackEmpty( )
  15. {
  16. if( top==-1)
  17. return true;
  18. else
  19. return false;
  20. }
  21. bool Push(T e)
  22. {
  23. if(top==MaxSize-1)
  24. return false;
  25. data[++top]=e;
  26. return true;
  27. }
  28. bool Pop( )
  29. {
  30. if( top==-1)
  31. return false;
  32. return true;
  33. }
  34. bool GetTop(T &x)
  35. {
  36. if( top==-1) return false;
  37. x = data[ top];
  38. return true;
  39. }
  40. bool Clear( )
  41. {
  42. top = -1;
  43. }
  44. };
  45. int main()
  46. {
  47. }
  1. #include <iostream>
  2. using namespace std;
  3. template<class T>class Stack
  4. {
  5. private:
  6. struct Node
  7. {
  8. T data;
  9. Node *next;
  10. };
  11. Node *head;
  12. Node *p;
  13. int length;
  14. public:
  15. Stack()
  16. {
  17. head = NULL;
  18. length = 0;
  19. }
  20. void push(T n)//入栈
  21. {
  22. Node *q = new Node;
  23. q->data = n;
  24. if (head == NULL)
  25. {
  26. q->next = head;
  27. head = q;
  28. p = q;
  29. }
  30. else
  31. {
  32. q->next = p;
  33. p = q;
  34. }
  35. length++;
  36. }
  37. T pop()//出栈并且将出栈的元素返回
  38. {
  39. if (length <= 0)
  40. {
  41. abort();
  42. }
  43. Node *q;
  44. int data;
  45. q = p;
  46. data = p->data;
  47. p = p->next;
  48. delete(q);
  49. length--;
  50. return data;
  51. }
  52. int size()//返回元素个数
  53. {
  54. return length;
  55. }
  56. T top()//返回栈顶元素
  57. {
  58. return p->data;
  59. }
  60. bool isEmpty()//判断栈是不是空的
  61. {
  62. if (length == 0)
  63. {
  64. return true;
  65. }
  66. else
  67. {
  68. return false;
  69. }
  70. }
  71. void clear()//清空栈中的所有元素
  72. {
  73. while (length > 0)
  74. {
  75. pop();
  76. }
  77. }
  78. };
  79. int main()
  80. {
  81. Stack<char> s;
  82. s.push('a');
  83. s.push('b');
  84. s.push('c');
  85. while (!s.isEmpty())
  86. {
  87. cout << s.pop() << endl;
  88. }
  89. system("pause");
  90. return 0;
  91. }

数据结构--栈(附上STL栈)的更多相关文章

  1. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

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

    stack,栈,是好比堆积木似的数据结构,从上之下堆积,取出时按"LIFO"-last int first out后进先出的规则.栈一般为线程所独有,也就是每个线程有其自有的栈,与 ...

  3. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  4. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  5. 自己动手实现java数据结构(三) 栈

    1.栈的介绍 在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来. ...

  6. 数据结构和算法之栈和队列三:自定义一个栈包含min函数

    我们都知道一个栈的特点是后进先出,如果我们要实现在O(1)的时间内找到一个栈里面的最小值,我们应该怎么解决?如果我们采用遍历获取的思路那必然所需要的时间是O(N)与我们所需要的要求明显不符合,这时候我 ...

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

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

  8. php数据结构课程---4、栈(是什么)

    php数据结构课程---4.栈(是什么) 一.总结 一句话总结: 栈(stack),它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算. 1.栈的链表实现? 定义node,设置属性d ...

  9. Java数据结构和算法(四)——栈

    stack,中文翻译为堆栈,事实上指的是栈,heap,堆. 这里讲的是数据结构的栈,不是内存分配里面的堆和栈. 栈是先进后出的数据的结构,好比你碟子一个一个堆起来.最后放的那个是堆在最上面的. 队列就 ...

随机推荐

  1. 抽签小程序,妈妈再也不用担心谁洗碗(分配任务)了,so easy

    背景 今天谁炒菜,谁洗碗,谁买菜...啊,Boss说用抽签吧,于是有了下图 这样存在作弊的问题(记住棍子特征,谁先,谁后抽等等)于是有了这个抽签小程序(当然小程序我一个人控制,我想不想作弊看心情了) ...

  2. java异常处理:finally中不要return

    java异常处理:finally中不要return 复制代码 public class Ex1 { public static void main(String[] args) { System.ou ...

  3. Tomcat5启动流程与配置详解

    标签:配置 tomcat 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto. ...

  4. elementUI踩坑

    1.滚动条消失,body中莫名出现行内样式overflow: hidden; 在做某个图片上传,显示功能出现的问题.控制台并没有报错,代码也并无相关操作 必须重新刷新页面之后滚动条才会显示出来 几天后 ...

  5. Daily Scrum 1/18/2016

    Yandong & Zhaoyang: Prepare bug bash slides for Beta release; Dong & Fuchen:Prepare demo for ...

  6. Performance standard (ALPHA release) 12/17/2015

    ===================ALPHA RELEASE STANDARD====================== 1. Parallel performance test: The Nu ...

  7. Python程序设计实验报告四:循环结构程序设计(设计型实验)

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.8     指导老师       修宇 [实验名称 ...

  8. PHP函数:array_key_exists

    array_key_exists()  - 检查数组里是否有指定的键名或索引. 注意:array_key_exists() 仅仅搜索第一维的键. 多维数组里嵌套的键不会被搜索到. 说明: rray_k ...

  9. 功能测试--聊天功能测试&微信聊天

    微信聊天功能测试 发送对象 普通用户.公众号.群.其他特殊主体 衍生功能 转发.语音转文字.删除等 消息发送 单聊.群聊.语音.文字.图片.表情.链接.字符及长度 消息管理 发布通知.接受通知.发文件 ...

  10. vue-element-admin执行npm install 报错

    如果你出现这类报错: 那么恭喜你,因为这个问题很好解决. ----------------------- 解决方法: git config --global url."https://&qu ...