1. #include <iostream>
  2. #include <Windows.h>
  3. using namespace std;
  4. #define MAXSIZE 6
  5. //顺序栈的实现
  6. typedef struct {
  7. int* base;
  8. int* top;
  9. int stacksize;
  10. int Length;
  11. }SQstack;
  12. //初始化
  13. void Initstack(SQstack& S) {
  14. S.base = new int[MAXSIZE];
  15. S.top = S.base;
  16. S.stacksize = MAXSIZE;
  17. S.Length = 0;
  18. }
  19. //入栈
  20. bool InsertStack(SQstack& S,int e) {
  21. if (S.top - S.base == S.stacksize) {
  22. cout << "栈已满,无法入栈!";
  23. return false;
  24. }
  25. //*(S.top++) = e;
  26. *S.top = e;
  27. S.top++;
  28. S.Length++;
  29. return true;
  30. }
  31. //出栈
  32. bool DeleteStack(SQstack& S, int &e) {
  33. if (S.base == S.top) {
  34. cout << "栈为空,无法出栈!" << endl;
  35. return false;
  36. }
  37. S.top--;
  38. e = *S.top;
  39. //e = *(--S.top);
  40. S.Length--;
  41. return true;
  42. }
  43. //获取栈顶元素
  44. void getTop(SQstack& S,int &e) {
  45. e = *(S.top-1);//返回栈顶元素的值,栈顶指针不变
  46. cout <<"栈顶元素为:"<< e << " ";
  47. cout << endl;
  48. }
  49. //判断栈是否为空
  50. bool EmptyStack(SQstack& S) {
  51. return S.base == S.top;
  52. }
  53. //销毁顺序栈
  54. void Destory(SQstack& S) {
  55. if (S.base) {
  56. delete S.base;
  57. S.base = NULL;
  58. }
  59. }
  60. //获取顺序栈的长度
  61. int getLnegth(SQstack& S) {
  62. return S.Length;
  63. }
  64. void showMenu() {
  65. cout << "\t顺序栈的基本操作" << endl;
  66. cout << "0.退出" << endl;
  67. cout << "1.入栈" << endl;
  68. cout << "2.出栈" << endl;
  69. cout << "3.获取栈顶元素" << endl;
  70. cout << "4.判断栈是否为空" << endl;
  71. cout << "5.返回栈的元素个数" << endl;
  72. }
  73. int main() {
  74. SQstack Q;
  75. int choose = 0;
  76. int e = 0;//要入栈的元素
  77. int n = 0;//入栈的元素个数
  78. int e1 = 0;//出栈的元素
  79. int e2 = 0;//栈顶元素
  80. Initstack(Q);
  81. showMenu();
  82. bool flag = -1;
  83. while (flag) {
  84. cout << "请选择:";
  85. cin >> choose;
  86. switch (choose)
  87. {
  88. case 1:
  89. cout << "请输入要入栈的元素个数:";
  90. cin >> n;
  91. while (n > 0) {
  92. cout << "请输入要入栈的元素:";
  93. cin >> e;
  94. if (InsertStack(Q, e)) {
  95. cout << "元素入栈成功!" << endl;
  96. }
  97. else {
  98. cout << "元素入栈失败!" << endl;
  99. }
  100. n--;
  101. }
  102. break;
  103. case 2:
  104. cout << "出栈------" << endl;
  105. if (DeleteStack(Q, e1)) {
  106. cout << "出栈的元素 :" << e1 << endl;
  107. }
  108. break;
  109. case 3:
  110. getTop(Q, e2);
  111. break;
  112. case 4:
  113. if (EmptyStack(Q)) {
  114. cout << "顺序栈为空!" << endl;
  115. }
  116. else {
  117. cout << "顺序栈不为空!" << endl;
  118. }
  119. break;
  120. case 5:
  121. cout << "顺序栈的长度为:" << getLnegth(Q) << endl;
  122. break;
  123. case 0:
  124. default:
  125. cout << "退出系统!" << endl;
  126. flag = 0;
  127. }
  128. }
  129.  
  130. cout << "销毁顺序表----" << endl;
  131. Destory(Q);
  132. system("pause");
  133. return 0;
  134. }

C/C++ 数据结构顺序栈的基本操作实现的更多相关文章

  1. 数据结构 - 顺序栈的实行(C语言)

    数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...

  2. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  3. 数据结构 - 顺序栈的实现 C++

    顺序栈封装 C++ 使用C++对顺序栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once # ...

  4. D_S 顺序栈的基本操作

    //  main.cpp #include <iostream> using namespace std; #include "Status.h" typedef in ...

  5. 数据结构——顺序栈(sequence stack)

    /* sequenceStack.c */ /* 栈 先进后出(First In Last Out,FILO)*/ #include <stdio.h> #include <stdl ...

  6. 数据结构--顺序栈--C++实现

    #include <iostream> #define MaxSize 5000 using namespace std; template <typename T> clas ...

  7. 数据结构之顺序栈SqStack

    顺序栈SqStack 基本操作 Status InitStack()//构造一个空栈S Status DestroyStack()//销毁栈S,S不再存在 Status ClearStack()//把 ...

  8. 数据结构——Java实现顺序栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...

  9. 【C#】【数据结构】005-栈:顺序栈

    C#数据结构:顺序栈 1.自定义顺序栈结构: /// <summary> /// 顺序栈 /// </summary> /// <typeparam name=" ...

  10. 数据结构(C实现)------- 顺序栈

    栈是限定仅在表的一端进行插入或删除的纯属表,通常称同意插入.删除的一端为栈顶(Top),对应在的.则称还有一端为栈底(Bottom). 不含元素的栈则称为空栈. 所设栈S={a1,a2,a3,..., ...

随机推荐

  1. Java注解及应用原理

    视频地址:https://www.bilibili.com/video/BV1Py4y1Y77P/?spm_id_from=333.337.search-card.all.click&vd_s ...

  2. Python学习笔记组织文件之用zipfile模块压缩文件

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  3. git 与远程仓库关联返回 fatal: remote origin already exists 解决方法

    今天领导新建了一个代码仓库,我按照流程一步步推送代码,结果到了关联仓库的时候,返回 fatal: remote origin already exists(远程源已经存在) 下面是解决方法 1.删除远 ...

  4. idea热部署插件JRebel激活

    首先到github上去下载一个反向代理软件,我下载的是windows x64版本. https://github.com/ilanyu/ReverseProxy/releases/tag/v1.4 第 ...

  5. antd DatePicker限制日期的选择

    import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...

  6. 请求/响应拦截器 给请求添加token认证

  7. 基于ALSA库实现音频采集和播放遇到的问题

    最近基于Linux系统C语言实现音频的采集和播放,建立了两个子线程,一个通过调用snd_pcm_readi来实现采集数据,并存入FIFO中,另一个从FIFO中取数据并通过udp的sendto发送出去, ...

  8. 使用端口排查解决启动Tomcat端口被占问题

    有时候在eclipse中启动Tomcat或启动纯净版的Tomcat会出现端口被占的问题,下面菜鸟小编带大家进行端口排查解决问题.(下面假设是我的80端口被占了,如果你不知道你的Tomcat端口是多少就 ...

  9. Qt实现带有映射关系的进度条

    1.编写继承自widget的新类,这里我们定义为colorWidget; 2.在colorWidget中添加私有变量QVector<QRect> m_rects,用于存放进度条的不同区间( ...

  10. phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)(Kali)

    ​ phpmyadmin 2.x版本中存在一处反序列化漏洞,通过该漏洞,攻击者可以读取任意文件或执行任意代码. 通过vulhub靶场进行复现操作 1.首先搭建靶场环境(采用Kali) cd vulhu ...