栈的特点

栈是一种 “ 后进先出 ” 的线性表

我们用stack表示 栈,则栈顶(top),栈底(bottom)

栈的举例

例如:洗盘子,我们需要清洗一摞盘子,总是先清洗上面的然后逐个 往下清洗(先进后出)

1、顺序栈的存储结构

#define MAXSIZE 100//上个专题讲过,顺序表需要提前申请空间
typedef struct{selemType *base;//栈底指针selemType *top; //栈顶指针int size;       //栈的最大容量
}sqStack;

2、初始化

      1.为空栈动态分配最大容量为MAXSIZE的空间,使base指向基地址

      2.栈顶指针初始化为base,表示栈S 为空

      3.置栈s的最大空间为MAXSIZE

#define status int
status init_Stack(sqStack S){   //构造空栈,名称为SS.base=new selemType[MAXSIZE];if(!S.base)return 0;S.top=S.base;   //初始化栈顶等于栈底         S.size=MAXSIZE; //MAXSIZE置为size的容量return 1;
}

3、入栈

     1.判断栈是否满了

     2.将新的元素放在栈顶,栈顶指针top+1

status push(sqStack &S,selemStack e){if(S.top-S.base==S.size)//栈满return 0;*S.top++=e;//元素送入栈顶,栈顶指针+1return 1;
}

4、出栈

     1.判断是否栈满

     2.栈顶指针-1,移除栈顶元素

status pop(sqStack &S,selemType &e){if(S.top-S.base==S.size)//栈满return 0;e=*(--S.top);//栈顶指针-1,栈顶赋值给ereturn 1;
}

5、取栈顶

     1.当栈非空时,返回当前栈顶元素的值,栈顶指针不变

bool get_Top(sqStack S,selemType &e){if(S.top!=S.base)//表示栈非空return flase; else{e=*(--S.top);return ture;}
}

顺序栈实现

1.头文件

#include<iostream>
#include<string>
#include<cstring>
#define status int
#define selemType int
#define MAXSIZE 100
using namespace std;
#include"head.h"
typedef struct{selemType *base;//栈底指针 selemType *top;//栈顶指针 int size;//栈可用的最大容量
}sqStack;status init_Stack(sqStack &S){S.base=new selemType[MAXSIZE];//动态分配最大容量if(!S.base){cout<<"分配内存失败"<<endl;return 0;}S.top=S.base;S.size=MAXSIZE;return 1;
};status push(sqStack &S,selemType e){if(S.top-S.base==S.size) return 0;//栈满*(S.top++)=e;return 1;
}status pop(sqStack &S,selemType &e){if(S.top==S.base) return 0;//栈空e=*(--S.top);return 1;
}bool get_Top(sqStack S,selemType &e) {if(S.top==S.base) return false;//栈空            else e=*(--S.top);return true;}void show_Menu(){cout<<"1. 入栈 \t\t\t2.出栈"<<endl<<"3.取栈顶\t\t\t4.退出"<<endl;
}void stack_Push(sqStack &S,selemType e){int n;int elem;cout<<"请输入入栈元素个数(>=1):"<<endl;cin>>n;for (int i=0;i<n;i++){cout<<"请输入第 "<<i+1<<" 个元素的值:"<<endl;cin>>e;elem=push(S,e);if(elem)cout<<"元素 "<<e<<" 已入栈..."<<endl;else {cout<<"栈满..."<<endl;break;}}
}void stack_Pop(sqStack &S,selemType e){int n;int elem;cout<<"请输入出栈元素个数(>=1):"<<endl;cin>>n;for (int i=0;i<n;i++){elem=pop(S,e);if(elem)cout<<"元素 "<<e<<" 已出栈..."<<endl;else {cout<<"栈空..."<<endl;break;}}
}void get_Stack_Top(sqStack &S,selemType e){bool elem; elem=get_Pop(S,e);if(elem)cout<<"现在 "<<e<<" 为栈顶元素。"<<endl;else cout<<"栈空..."<<endl;
}int main(){sqStack S;int choice;init_Stack(S);while(1){show_Menu();cout<<"请输入选项:"<<endl;cin>>choice;if(choice==4) break;switch(choice){case 1:stack_Push(S);break;case 2:stack_Pop(S);break;case 3:get_Stack_Top(S);break;default:cout<<"非法输入!"<<endl;}}cout<<"Done!"<<endl;system("pause>nul");return 0;
}

顺序栈的基本操作(C++实现)相关推荐

  1. C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)

    //顺序栈的基本操作 #include<stdio.h> #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct ...

  2. 【C++】【数据结构】顺序栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码

    C++实现顺序栈的算法+步骤(附全代码): 使用c++完成数据结构顺序栈的基本操作,包括(初始化.入栈.出栈.取栈顶元素.遍历输出栈等),可直接编译运行. 顺序栈的定义如下: #define MAXS ...

  3. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  4. python 顺序栈及基本操作

    顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数 ...

  5. c语言顺序栈完整程序,顺序栈的基本操作(C语言)

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

  6. 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)

    1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...

  7. 顺序栈的基本操作 C++

    用顺序存储结构表示的栈,称为顺序栈,它用一个顺序表和栈顶指针实现. 顺序表中,用top指针指示栈顶元素在顺序栈中的位置. 当top指针与base指针指向相同位置时栈为空. #include <i ...

  8. 关于顺序栈的基本操作

    #include<stdio.h> #define StackSize 100 typedef int DataType; typedef struct {DataType data[St ...

  9. 顺序栈基本操作(入栈和出栈)C语言详解

    #include <stdio.h> #include <stdlib.h> /*顺序栈基本操作(入栈和出栈)C语言详解栈的具体实现(1)顺序栈(2)链栈栈的应用(1)回退 ( ...

最新文章

  1. jsp和servlet开发过程中参数传递乱码问题总结
  2. html精灵图坐标如何确定,如何使用HTML中的精灵图
  3. 【c++】28.虚析构函数、纯虚函数
  4. 【实验】华为静态路由基础配置
  5. 一道笔试题--求二进制数1的个数
  6. python回收机制
  7. 宿舍管理系统项目管理师_2020下半年信息系统项目管理师真题——案例分析(带解析)...
  8. Mr.J-- jQuery学习笔记(八)--CSS样式操作
  9. leetcode547. 省份数量
  10. 数据挖掘:实用案例分析 下载_【实用干货】17 种服装印花工艺(图文案例分析)...
  11. mysql cluster安装配置_mysqlcluster安装与配置_MySQL
  12. ado mfc mysql_MFC 中用ADO访问数据库
  13. java映射理解_Java反射的理解
  14. 巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码
  15. 一位资深程序员大牛给予Java初学者的学习路线建议
  16. 集成学习算法策略 Boosting和Bagging
  17. 商品表设计-实现侧滑栏类目Catagory和商品的多对多关系
  18. java程序员那些提升_Java程序员如何进行自我提升?
  19. 服务器操作系统win2008如何打补丁,如何安装win server 2008 r2 sp1补丁?
  20. python画糖葫芦_小班美术甜甜的糖葫芦教案

热门文章

  1. 蜜源如何快速做到月入过万
  2. Win系统 - 微信居然自带修复工具?快来试试
  3. Golang连接池应用实践
  4. android蓝牙配对 自动联接,如何实现android蓝牙开发 自动配对连接,并不弹出提示框...
  5. 银行理财产品怎么做引流?抖音上怎么做理财产品?
  6. 桌面上打开计算机有延迟感觉,电脑中右击操作反应慢如何解决|解决右键菜单弹出延迟的方法...
  7. 【性能测试】Jmeter性能测试实战
  8. Android中,Sqlite数据库读取数据为空的问题
  9. 硬盘主分区和逻辑驱动器的区别
  10. 如何限制在制品?| Kanban