数据结构之栈

                                                                                       栈
特点
    后进先出 先进后出
举例
    子弹匣
应用
    1程序方法的调用和返回就是将程序入口地址进行入栈和出栈操作
    2带括号与正负符号等多重优先级的计算器程序实现

typedef double EleType;
typedef struct{
	EleType *buf;
	int top;
	int max;
}List;

List *CreateList(int max);
int PushStack(List *lp,EleType data);
EleType PopStack(List *lp);
int TraverseList(List *lp,int (*f)(EleType *data));
EleType GetElement(List *lp);
int IsEmpty(List *lp);
int IsFull(List *lp);
void DestroyList(List *lp);

List *CreateList(int max){
	List *lp;	
	lp = (List *)malloc(sizeof(List));
	if(!lp){
		return 0;
	}
	lp->buf =(EleType *)malloc(sizeof(EleType)*max);
	lp->max =  max;
	lp->top = -1; 
	return lp;
}

int PushStack(List *lp,EleType data){
	if(IsFull(lp))
		return 0;
	lp->top++;
	lp->buf[lp->top] = data;
	return	1; 
}
EleType PopStack(List *lp){
	EleType a; 
	if(IsEmpty(lp))
		return 0;
        a = lp->buf[lp->top];
		lp->top--;
		return a;
}
int TraverseList(List *lp,int (*f)(EleType *data)){
	int a;
	if(lp->top==-1)
		return 0;
	for(a = 0;a<lp->top;a++){
		if(IsFull(lp))
			return 0;
		if(!f(&(lp->buf[a]))){
			return a+1;
		}
	}
	return 1;
}
EleType GetElement(List *lp){
	EleType a; 
	if(IsEmpty(lp))
		return 0;
        a = lp->buf[lp->top];
		lp->top--;
		return a;	

}
int IsEmpty(List *lp){
	if(lp->top==-1)
		return 1;
	else
		return 0;
}
int IsFull(List *lp){
	if(lp->top==lp->max-1)
		return 1;
	else
		return 0;
}
void DestroyList(List *lp){
	free(lp);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值