顺序栈的基本操作(C++实现)
栈的特点
栈是一种 “ 后进先出 ” 的线性表
我们用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++实现)相关推荐
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
//顺序栈的基本操作 #include<stdio.h> #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct ...
- 【C++】【数据结构】顺序栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码
C++实现顺序栈的算法+步骤(附全代码): 使用c++完成数据结构顺序栈的基本操作,包括(初始化.入栈.出栈.取栈顶元素.遍历输出栈等),可直接编译运行. 顺序栈的定义如下: #define MAXS ...
- java顺序栈_顺序栈的基本操作(入栈和出栈)
顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...
- python 顺序栈及基本操作
顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数 ...
- c语言顺序栈完整程序,顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)
1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...
- 顺序栈的基本操作 C++
用顺序存储结构表示的栈,称为顺序栈,它用一个顺序表和栈顶指针实现. 顺序表中,用top指针指示栈顶元素在顺序栈中的位置. 当top指针与base指针指向相同位置时栈为空. #include <i ...
- 关于顺序栈的基本操作
#include<stdio.h> #define StackSize 100 typedef int DataType; typedef struct {DataType data[St ...
- 顺序栈基本操作(入栈和出栈)C语言详解
#include <stdio.h> #include <stdlib.h> /*顺序栈基本操作(入栈和出栈)C语言详解栈的具体实现(1)顺序栈(2)链栈栈的应用(1)回退 ( ...
最新文章
- jsp和servlet开发过程中参数传递乱码问题总结
- html精灵图坐标如何确定,如何使用HTML中的精灵图
- 【c++】28.虚析构函数、纯虚函数
- 【实验】华为静态路由基础配置
- 一道笔试题--求二进制数1的个数
- python回收机制
- 宿舍管理系统项目管理师_2020下半年信息系统项目管理师真题——案例分析(带解析)...
- Mr.J-- jQuery学习笔记(八)--CSS样式操作
- leetcode547. 省份数量
- 数据挖掘:实用案例分析 下载_【实用干货】17 种服装印花工艺(图文案例分析)...
- mysql cluster安装配置_mysqlcluster安装与配置_MySQL
- ado mfc mysql_MFC 中用ADO访问数据库
- java映射理解_Java反射的理解
- 巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码
- 一位资深程序员大牛给予Java初学者的学习路线建议
- 集成学习算法策略 Boosting和Bagging
- 商品表设计-实现侧滑栏类目Catagory和商品的多对多关系
- java程序员那些提升_Java程序员如何进行自我提升?
- 服务器操作系统win2008如何打补丁,如何安装win server 2008 r2 sp1补丁?
- python画糖葫芦_小班美术甜甜的糖葫芦教案
热门文章
- 蜜源如何快速做到月入过万
- Win系统 - 微信居然自带修复工具?快来试试
- Golang连接池应用实践
- android蓝牙配对 自动联接,如何实现android蓝牙开发 自动配对连接,并不弹出提示框...
- 银行理财产品怎么做引流?抖音上怎么做理财产品?
- 桌面上打开计算机有延迟感觉,电脑中右击操作反应慢如何解决|解决右键菜单弹出延迟的方法...
- 【性能测试】Jmeter性能测试实战
- Android中,Sqlite数据库读取数据为空的问题
- 硬盘主分区和逻辑驱动器的区别
- 如何限制在制品?| Kanban