栈的顺序存储实现

来源:互联网 发布:黑帮之地mac 编辑:程序博客网 时间:2024/03/28 18:22
#ifndef _SEQUENCE_STACK_LIST_H_#define  _SEQUENCE_STACK_LIST_H_#pragma once/************************************************************************//*                    顺序存储栈实现SequenceStackList                     *//************************************************************************//*ADT 栈(Stack)Data线性表的数据对象集合为{a1,a2,....an},每个元素的类型为DataType。其中除了第一个元素a1外,其他数据元素都有且仅有一个后继元素,除了最后一个元素an外,其他数据元素都有且仅有一个前驱元素。数据元素之间的关系时一种一对一的关系。OperationInitStack(*S);初始化操作,建立一个空的栈S。DestoryStack(*S);若栈存在,则销毁它ClearList(*S);将栈清空StackEmpty(S);若栈为空返回true,否则返回falseGetTop(S,*e);若栈不为空,返回栈顶元素Push(*S,e);如果栈存在,插入新元素e到栈S中,并成为新的栈顶元素Pop(*L,*e);删除栈S中栈顶元素,并返回这个位置的元素值eStackLength(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;}


0 0