栈的基本操作(线性存储)
来源:互联网 发布:淘宝手链知乎 编辑:程序博客网 时间:2024/05/18 00:26
栈的基本操作,包括初始化、压栈、入栈、判断栈是否为空、以及取栈顶元素
#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;#define STACK_INIT_SIZE 50#define STACKINCREMENT 10typedef int Elemtype;typedef struct Stack{Elemtype *data;int top;int stacksize;}SqStack;//栈的初始化void InitStack(SqStack &s){s.data = (Elemtype *) malloc(sizeof(Elemtype[STACK_INIT_SIZE])); //用动态数组来分配顺序存储的空间if(!s.data){cout<<"初始化失败!"<<endl;exit(-1);}s.top = -1; //开始时,栈顶指针指向-1s.stacksize = STACK_INIT_SIZE;}//压栈操作,将 elem 压入栈顶void Push(SqStack &s,Elemtype elem){if(s.top >= s.stacksize-1) //栈满{Elemtype *p = (Elemtype *) realloc (s.data,(s.stacksize + STACKINCREMENT) * sizeof(Elemtype));if( !p){cout<<"栈满时,重新分配内存失败!"<<endl;exit(-1);}s.data = p;s.stacksize = s.stacksize + STACKINCREMENT;}s.data[++s.top] = elem; //先自增s.top,然后赋值}//出栈操作void Pop(SqStack &s){if(s.top == -1) //先判断栈是否为空{cout<<"出栈错误,栈为空!"<<endl;//exit(-1);}elsecout<<"出栈的元素为:"<<s.data[s.top--]<<endl;}//去栈顶元素,和出栈差不多Elemtype GetTop(SqStack &s){if(s.top == -1) //先判断栈是否为空{cout<<"出栈错误,栈为空!"<<endl;//exit(-1);}elsereturn s.data[s.top]; //这里就不需要改变 top 指针了,只是取出元素}//判断是否为空栈void StackEmpty(SqStack &s){if(s.top == -1)cout<<"栈为空!"<<endl;elsecout<<"栈非空!"<<endl;}int main(){SqStack s;//栈初始化cout<<"------------栈初始化:------------"<<endl;InitStack(s);StackEmpty(s);//压栈操作cout<<"------------压栈操作:------------"<<endl;Elemtype n;cout<<"请输入要压栈的元素:";while(scanf("%d",&n) != EOF){Push(s,n);cout<<"此时栈顶元素:"<<GetTop(s)<<endl;cout<<"请输入要压栈的元素:";}StackEmpty(s);//出栈操作cout<<"------------出栈操作------------"<<endl;Pop(s);cout<<"此时栈顶元素:"<<GetTop(s)<<endl;Pop(s);cout<<"此时栈顶元素:"<<GetTop(s)<<endl;StackEmpty(s);return 0;}
0 0
- 栈的基本操作(线性存储)
- 线性表的链式存储(单链表)的基本操作
- 线性单链表的存储及基本操作(整理)
- 线性表(顺序存储结构)的基本操作
- 线性表顺序存储的基本操作
- 线性表的线性存储及基本操作
- 线性表的顺序存储的基本操作
- 线性表的顺序存储结构的基本操作
- 线性表的顺序存储与基本操作
- 线性表的链式存储与基本操作
- 数据结构学习---线性表顺序存储结构的基本操作
- 线性表_顺序存储/基本操作
- 线性表链式存储结构基本操作
- 线性表顺序存储结构基本操作
- 线性表----顺序栈的基本操作
- 线性表----链接栈的基本操作
- 线性表的基本操作(单链表)
- 线性表的基本操作(一)
- proc_oracle
- iOS开发工具——网络封包分析工具Charles
- 护眼的RGB值
- 知识点随记-java
- linux 下,命令生成wsdl文件
- 栈的基本操作(线性存储)
- HTTP协议的主要特点
- STL 堆(heap)
- python cook book第三版 读书笔记4(第四章,迭代器和生成器)
- Android之achartengine简单示例(折线的光滑化)
- opencart中的load类和Registry类及controller分析
- 两个二进制数异或的结果
- java 欢迎进入设计模式世界之前凑
- maven安装配置-eclipsemaven插件-导入maven项目全过程