数据结构之栈的顺序表实现


/*
	实现功能:用顺序表实现栈的各种操作
	编译环境:Windows 64b,vc6.0
	日期:    2015/7/20
	作者:wtt561111
*/


#define stack_max_num 10
#include "stdio.h"
#include "stdlib.h"
struct SeqStack{
	int MAXNUM;
	int t;//始终指向栈顶
	int *s;
};
typedef struct SeqStack *PSeqStack;



/*
	创建一个空的堆栈,存储方式为顺序表
*/
PSeqStack createEmptyStack_seq(int m){

	PSeqStack pastack=(PSeqStack)malloc(sizeof (struct SeqStack));
	if(pastack==NULL){
		printf("out of spcae!\n");
		return NULL;
	}
	pastack->s=(int * )malloc (sizeof (int)*m);
	if(pastack==NULL){
		printf("out of space!\n");
		return NULL;
	}
	pastack->MAXNUM=m;
	pastack->t=-1;
	return pastack;
}
/*****************************************************/

/*
	判断堆栈是否为空
*/
int isEmptyStack_seq(PSeqStack pastack){

	if(pastack->t==(-1) )
		return 1;
	return 0;

}
/*****************************************************/


/*
	将x压入栈中,成功返回1,否则返回0;
*/
int push_seq(PSeqStack pastack,int x){

	if(pastack->t >= pastack->MAXNUM){
		printf("overflow!\n");
		return 0;
	}
	pastack->t=pastack->t+1;
	pastack->s[pastack->t]=x;
	return 1;

}
/*****************************************************/


/*
	将栈顶元素出栈,成功返回1,否则返回0;
*/
int pop_seq(PSeqStack pastack){

	if(pastack->t==(-1)){
		printf("empty stack!\n");
		return 0;
	}
	pastack->t=(pastack->t)-1;
	return 1;

}
/*****************************************************/


/*
	获取栈顶元素,成功返回栈顶元素,否则返回-1;
*/
int top_seq(PSeqStack pastack){

	if(pastack->t==(-1)){
		printf("empty stack!\n");
		return -1;
	}

	return pastack->s[pastack->t];

}
/*****************************************************/

/********************主函数***************************/
int main(){
	PSeqStack stack_get=createEmptyStack_seq(stack_max_num);
	push_seq(stack_get,0);
	push_seq(stack_get,1);
	push_seq(stack_get,2);
	push_seq(stack_get,3);
	pop_seq(stack_get);
	int from_top=top_seq(stack_get);
	printf("%d\n",from_top);
	return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值