顺序堆栈的操作实现(C语言)

#include<stdio.h>
//#define MaxStackSize 100
//typedef int DataType;
//定义结构体SeqStack 
typedef struct  {
	//顺序堆栈要存放元素的数组,其元素数量的最大值为MaxStackSize 
	DataType stack[MaxStackSize];
	//top表示栈顶的位置 
	int top;
}SeqStack;
 
//初始化(初始化顺序堆栈S) 
void StackInitiate(SeqStack *S)  
{
	//初始化栈顶下标值 
	S->top = 0;
}
 
//非空否 
int StackNotEmpty(SeqStack S) 
{
    //判断顺序堆栈S是否为空
	if(S.top <= 0)
	{
	    //否则返回0
		return 0;
	}
	else
	{
		//若为非空则返回1
		return 1;
	}
}

//入栈 (把x存入顺序堆栈S中) 
int StackPush(SeqStack *S, DataType x){
	//判断顺序堆栈S是否已满 
	if(S->top >= MaxStackSize){
		//已满,入栈不成功,返回0 
		printf("堆栈已满无法插入!\n"); 
		return 0;
	}
	//否则,入栈成功,返回1 
	else{
		//将值存入 
		S->stack[S->top] = x;
		//栈顶加一 
		S->top ++;
		return 1;
	}
}

//出栈 (取出顺序堆栈S的栈顶元素由参数d带回) 
int StackPop(SeqStack *S, DataType *d){
	//判断顺序堆栈S是否已经元素已经出栈完 
	if(S->top <= 0){
		//若已经出栈,返回0 
		printf("堆栈已空无元素出栈!\n");
		return 0;
	}
	//否则出栈,返回1 
	else{
		S->top--;
		*d = S->stack[S->top];
		return 1;
	}
}

//取栈顶元素 (取出顺序栈顶S的当前栈顶元素由参数d带回) 
int StackTop(SeqStack S, DataType *d){
	//判断顺序堆栈S是否已经元素已经出栈完 
	if(S.top <= 0){
		//若顺序堆栈已空,返回值0 
		printf("堆栈已空\n");
		return 0;
	}
	//否则,返回值和返回1 
	else{
		*d = S.stack[S.top - 1];
		return 1;
	}
}

注意:出栈和取栈顶不一样,出栈后要删除原来的位置,而取栈顶则是将栈顶的值复制一遍再输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值