#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;
}