顺序堆栈的基本算法

顺序堆栈的存储结构类型描述如下:

#define M 1000     /* 定义堆栈的最大容量 */
SElemType STACK[ M ];
int top;           /* 栈顶指针变量 */

下面是基本算法描述,很简单:

#include<stdlib.h>
#include<stdio.h>

#define M 1000     /* 定义堆栈的最大容量 */

/* 初始化一个堆栈 */
void initials( int *top ){
	*top = -1;
}

/* 测试堆栈是否为空, 当堆栈为空时,算法返回1,否则返回0 */
int isEmpty( int top ){
	return top == -1;
}

/* 测试堆栈是否已满, 当堆栈已满时,算法返回1,否则返回0 */
int isFull( int top ){
	return top == M -1;
}

/* 取当前栈顶元素,将当前栈顶元素取出送变量item,需测试堆栈是否为空 */
int getTop( int *st, int top, int *item ){
	if( isEmpty( top ) )  /* 堆栈为空,操作失败,返回0 */
		return 0;
	else{
		*item = st[ top ];   /* 保存栈顶元素 */
		return 1;            /* 堆栈非空,操作成功,返回1 */
	}
}

/* 进栈,需测试堆栈是否已满 */
int push( int *st, int *top, int item ){
	if( isFull( *top ) )     /* 堆栈已满,插入失败,返回0 */
		return 0;
	else{
		st[ ++( *top ) ] = item;
		return 1;           /* 插入成功,返回1 */
	}	
}

/* 退栈,需测试堆栈是否为空 */
int pop( int *st, int *top, int *item ){
	if( isEmpty( *top ) )
		return 0;             /* 堆栈为空,删除失败,返回0 */
	else{
		*item = st[ ( *top )-- ];
		return 1;           /* 删除成功,返回1 */
	}
}


下面是测试上述算法是否正确的代码:

/* 打印堆栈 */
void printStack( int *st, int top ){
	while( top != -1 ){
		printf( "%d\n", st[ top ] );
		top--;
	}
}

int main(){
	int stack[ M ];
	int top;
	initials( &top );
	push( stack, &top, 5 );
	push( stack, &top, 8 );
	push( stack, &top, 9 );
	push( stack, &top, 2 );
	printStack( stack, top );

	printf( "the stack is full %d\n", isFull( top ) );	
	
	int item;
	pop( stack, &top, &item );
	printf( "the pop elem is %d\n", item );

	getTop( stack, top, &item );
	printf( "the top elem is %d\n", item );

	pop( stack, &top, &item );
	pop( stack, &top, &item );
	pop( stack, &top, &item );
	
	printf( "the stack is empty: %d\n", isEmpty( top ) );

	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值