顺序栈的初始化,进栈、出栈、求长、判空、访顶、遍历、清空、销毁
来源:互联网 发布:dx 1vb大屏幕显示器 编辑:程序博客网 时间:2024/04/30 09:05
顺序栈即栈的顺序存储结构,它利用一组地址连续的存储单元存放自栈底到栈顶的元素,是一种后进先出(last in first out,LIFO)的线性表。
判断栈不存在的条件为:S.base=NULL;
空栈:S.base=S.top;
满栈:S.top-S.base=S.stacksize;
#include "stdafx.h" #include <iostream> #define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int ElemType;typedef int Status;using namespace std;typedef struct Stack{int *base;int *top;int stacksize; //当前已分配的存储空间}SqStack;bool initStack(SqStack &S) {S.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if (!S.base){cout << "内存分配失败!" << endl;exit(OVERFLOW);}S.top = S.base;S.stacksize = STACK_INIT_SIZE;return true;}//判断栈是否为空bool isStackEmpty(SqStack &S) {if (S.top == S.base)return true;elsereturn false;}//取栈顶元素,并将值返回Status getTop(SqStack &S) {if (isStackEmpty(S)){cout << "栈为空!" << endl;return 0;}return *(S.top - 1);}//插入元素e为栈顶元素Status push(SqStack &S, ElemType e) {if (S.top - S.base >= S.stacksize) //栈满,追加栈的空间{S.base = (ElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(ElemType));if (!S.base){exit(OVERFLOW);}S.top = S.base + S.stacksize; //基地址+当前内存空间S.stacksize += STACKINCREMENT;}*S.top = e;S.top++;return true;}//删除栈顶元素,并返回Status pop(SqStack &S) {ElemType e;if (isStackEmpty(S)){cout << "栈为空!" << endl;return false;}return *(--S.top);}//获取栈的长度Status getStackLength(SqStack &S) {return S.top - S.base;}//清空栈bool clearStack(SqStack &S) {while (!isStackEmpty(S))pop(S);return true;}//销毁栈bool destroyStack(SqStack &S) {clearStack(S);S.stacksize = 0;S.top = S.base = NULL;return true;}Status visit(ElemType e) {cout << e << " ";return true;}//遍历栈,遍历顺序为出栈的顺序void stackTraverse(SqStack &S) {if (isStackEmpty(S)) {cout << "栈为空!" << endl;exit(0);}while (!isStackEmpty(S)){visit(*(--S.top));}cout << endl;}int main() {SqStack stack;cout << "构造了一个空栈" << endl;;initStack(stack);ElemType e;cout << "向栈中插入第一个元素:";cin >> e;push(stack, e);cout << "向栈中插入第二个元素:";cin >> e;push(stack, e);cout << "向栈中插入第三个元素:";cin >> e;push(stack, e);cout << "获取栈顶元素:" << getTop(stack);cout << endl << "执行一次出栈操作,出栈元素为:" << pop(stack);cout << endl << "获取栈顶元素:" << getTop(stack);cout << endl << "获取栈的长度:" << getStackLength(stack);cout << endl << "遍历栈:";stackTraverse(stack);cout << "执行清栈操作" << endl;;clearStack(stack);stackTraverse(stack);system("pause");return 0;}
阅读全文
1 0
- 顺序栈的初始化,进栈、出栈、求长、判空、访顶、遍历、清空、销毁
- 链式栈的初始化,判空,进栈,出栈,求长,求顶,打印,清空和销毁
- 链栈初始化、进栈、出栈、判空、遍历、求长、求顶、清栈、毁栈
- 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
- 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列和循环队列的表示与实现-初始化、判空、求长、入队、出队、遍历、求头、求尾、清队、毁队
- 顺序栈初始化,判空,进栈,出栈,打印
- 数据结构中顺序栈的基本函数运用,包括创建空栈,初始化,清空,销毁,增加,删除,遍历等函数
- [数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
- c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
- 栈的出栈、入栈、遍历、清空操作
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 循环顺序队列(初始化、入队、出队、判空)
- [数据结构]c语言实现链栈的入栈,出栈,清空,销毁等操作
- 双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
- NOIP 2006 明明的随机数
- NOIP2002 洛谷P1033 自由落体
- Linux下安装和运行Wireshark
- url传递中文乱码问题
- where字句有关的优化+使用where字句代替having字句
- 顺序栈的初始化,进栈、出栈、求长、判空、访顶、遍历、清空、销毁
- 递归函数
- [leetcode]605. Can Place Flowers
- 如何使用nginx做反向代理服务器?
- Android之使用串口通信及协议解析
- 在CentOS 上 调试 MySQL-5.7.x 或者 MySQL-8.0 源码
- python 3.6X安装notebook后无法打开的解决办法
- 如何学习计算机编程语言
- 【Python】6“dict和set“