您的位置:首页 > 其它

栈的顺序存储实现

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: