栈的顺序存储实现
2015-12-29 02:02
369 查看
#ifndef _SEQUENCE_STACK_LIST_H_ #define _SEQUENCE_STACK_LIST_H_ #pragma once /************************************************************************/ /* 顺序存储栈实现SequenceStackList */ /************************************************************************/ /*ADT 栈(Stack) Data 线性表的数据对象集合为{a1,a2,....an},每个元素的类型为DataType。其中除了第一个元素a1外, 其他数据元素都有且仅有一个后继元素,除了最后一个元素an外,其他数据元素都有且仅有一个前驱元素。 数据元素之间的关系时一种一对一的关系。 Operation InitStack(*S);初始化操作,建立一个空的栈S。 DestoryStack(*S);若栈存在,则销毁它 ClearList(*S);将栈清空 StackEmpty(S);若栈为空返回true,否则返回false GetTop(S,*e);若栈不为空,返回栈顶元素 Push(*S,e);如果栈存在,插入新元素e到栈S中,并成为新的栈顶元素 Pop(*L,*e);删除栈S中栈顶元素,并返回这个位置的元素值e StackLength(S);返回栈S的元素个数 TraversList(S);遍历栈S元素 endADT */ typedef struct SequeceStackList { int top; ElemType data[MaxCapacity]; }SequeceStackList; /*初始化操作,建立一个空的栈S。*/ Status InitStack(SequeceStackList* S); /*若栈存在,则销毁它*/ Status DestoryStack(SequeceStackList* S); /*将栈清空*/ Status ClearStack(SequeceStackList* S); /*若栈为空返回true,否则返回false*/ bool StackEmpty(SequeceStackList S); /*若栈不为空,返回栈顶元素*/ Status GetTop(SequeceStackList S,int* e); /*如果栈存在,插入新元素e到栈S中,并成为新的栈顶元素*/ Status Push(SequeceStackList* S,int e); /*删除栈S中栈顶元素,并返回这个位置的元素值e*/ Status Pop(SequeceStackList* S,int *e); /*返回栈S的元素个数*/ int StackLength(SequeceStackList S); /*遍历栈S元素*/ Status TraverseStack(SequeceStackList S); #endif//_SEQUENCE_STACK_LIST_H_
#include "stdafx.h" #include "SequenceStackList.h" /*初始化操作,建立一个空的栈S。*/ Status InitStack(SequeceStackList* S) { S->top = 0; return OK; } /*若栈存在,则销毁它*/ Status DestoryStack(SequeceStackList* S) { ClearStack(S); free(S); S = NULL; return OK; } /*将栈清空*/ Status ClearStack(SequeceStackList* S) { while(S->top) { S->data[S->top--]; } return OK; } /*若栈为空返回true,否则返回false*/ bool StackEmpty(SequeceStackList S) { return S.top == 0; } /*若栈不为空,返回栈顶元素*/ Status GetTop(SequeceStackList S,int* e) { if(StackEmpty(S)) return ERROR; *e = S.data[S.top]; return OK; } /*如果栈存在,插入新元素e到栈S中,并成为新的栈顶元素*/ Status Push(SequeceStackList* S,int e) { S->data[++S->top] = e; return OK; } /*删除栈S中栈顶元素,并返回这个位置的元素值e*/ Status Pop(SequeceStackList* S,int *e) { if(StackEmpty(*S)) return ERROR; *e = S->data[S->top--]; return OK; } /*返回栈S的元素个数*/ int StackLength(SequeceStackList S) { return S.top; } /*遍历栈S元素*/ Status TraverseStack(SequeceStackList S) { for (int i = S.top ; i >= 1 ; i--) { std::cout<<"链表中第"<<i<<"个元素的值为:"<<S.data[i]<<std::endl; } return OK; }
相关文章推荐
- 线性表链式存储结构实现 --双向循环链表
- 归并排序
- STL vector用法介绍
- 线性表链式存储结构实现 --单向循环链表
- IntelliJ IDEA+Tomcat+Nginx运行git项目
- poj-3579 Median
- JSP实现HTML网页对Mysql数据库的数据修改
- 生产者消费者问题【线程中ConcurrentLinkedQueue】
- 线性表链式存储结构实现--静态链表
- [LeetCode] 45. Jump Game II 解题思路
- 线性表链式存储结构实现 --单链表
- Burndown chart
- Git下使用版本回退粗暴解决冲突问题
- linux下网卡配置管理工具ifconfig小结
- php生成网页桌面快捷方式
- JSP实现HTML网页中分页查询Mysql数据库数据
- ubuntu和win7引导修复
- ThinkPHP+JQuery实现ajax无刷新登录验证(详解+相关问题)
- PL/SQL 64位发布啦!!!
- No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse