栈ADT

本文介绍如何使用数组实现栈的数据结构,包括栈的基本操作如创建、销毁、检测空栈、创建空栈、进栈、出栈及获取栈顶元素等,并提供了具体的C语言实现代码。

    栈是一种特殊的结构,具有先进后出的性质。由于栈是一个表,因此任何实现表的方法都能实现栈。



使用数组实现

(1)类型声明

#ifndef _Stack_h
struct StackRecord;
typedef struct StackRecord *Stack;

int IsEmpty( Stack S );
int IsFull( Stack S);
Stack CreateStack( int MaxElements );
void DisposeStack( Stack S);
void MakeEmpty( Stack S);
void Push( ElementType x, Stack S);
ElementType Top( Stack S);
void Pop( Stack S);
ElementType TopAndPop( Stack S );

#endif;


#define EmotyTOS ( -1 )
#define MinStackSize ( 5 )

struct Node
{
	int Capacity;
	int TopOfStack;
	ElementType *Array;
};

(2) 栈的创建

Stack CreateStack(int MaxElements)
{
	Stack S;
	
	if(MaxElements <MinStackSize)
	   Error("Stack size is to small");
	S=malloc( sizeof( struct StackRecord ));
	if( S=NULL )
	FatalError( "out of space!!!" );
	S->Array=malloc( sizeof( ElementType ) * MaxElements );
	if(S->Array==NULL)
	   FatalError( "Out of space!!!" );
       S->Capacity=MaxElements;
       MakeEmpty( S );
       
       return S;
}

(3)释放栈

void DisposeStack( Stack S )
{
       if( S != NULL )
       {
              free( S->Array );
              Free( S ); 
        }
}

(4) 检测一个栈是否为空

int IsEmpty( Stack S)
{
	return S->TopOfStack == EmptyTOS;
}

(5)创建一个空栈

void MakeEmpty( Stack S)
{
	S->TopOfStack=EmptyTOS;
}

(6)进栈
void Push ( ElementType x,Stack S)
{
	if( IsFull( S ) )
	   Error( "FULL stack" );
       else 
         S->Array[ ++S->TopOfStack ] = x;
}
(7)将栈顶返回
ElementType Top( Stack S )
{
	if( !IsEmpty( S ) )
	{
		return S->Array[ S->TopOfStack ];
	}
	Error( "Empty Stack" );
	return 0;
}
(8)从栈弹出元素

void pop( Stack S)
{
	if( IsEmpty ( S ) )
	  Error( "Empty stack" );
       else S->TopOfStack--;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值