栈(记忆性线性结构)

是一种线性结构,基本特点:从同一端入栈或出栈, 先入后出
基本操作:入栈(push),出栈(pop)
基本组成:存储空间、栈顶指针、栈底指针
一个堆栈的必须需要的元素:堆栈空间、栈底指针、最大空间
#ifndef _STACK_H_
#define _STACK_H_

#include<malloc.h>

typedef unsigned char Boolean;

typedef struct STACK{
	USER_TYPE *stack;
	unsigned int maxRoom;
	unsigned int top;
}STACK;

#define TURE 1
#define FLASE 0

Boolean initStack(STACK **head,unsigned int maxRoom);
Boolean destoryStack(STACK **head);
Boolean isStackEmpty(STACK stack);
Boolean isStackFull(STACK stack);
Boolean push(STACK *stack,USER_TYPE data);
Boolean pop(STACK *stack,USER_TYPE *data);
Boolean readTop(STACK stack,USER_TYPE *data);

Boolean readTop(STACK stack,USER_TYPE *data){
	Boolean OK = TURE;

	if(isStackFull(stack))
		OK = FLASE;
	else
		*data = stack.stack[stack.top - 1];
}
Boolean pop(STACK *stack,USER_TYPE *data){
	Boolean OK = TURE;

	if(stack == NULL || isStackFull(*stack))
		OK = FLASE;
	else
		*data = stack->stack[--stack->top];

	return OK;
}
Boolean push(STACK *stack,USER_TYPE data){
	Boolean OK = TURE;

	if(stack == NULL || isStackEmpty(*stack))
		OK = FLASE;
	else
		stack->stack[stack->top++] = data;

	return OK;
}
Boolean isStackFull(STACK stack){
	return stack.top >= stack.maxRoom;
}
Boolean isStackEmpty(STACK stack){
	return 0 == stack.top;
}
Boolean destoryStack(STACK **head){
	Boolean OK = TURE;

	if(*head == NULL){
		OK = FLASE;
	}else{
		free((*head)->stack);
		free(*head);
		(*head) = NULL;
	}

	return OK;
}
Boolean initStack(STACK **head,unsigned int maxRoom){
	Boolean OK = TURE;

	if(maxRoom <= 0 || (*head)){
		OK = FLASE;
	}
	if(OK && (*head = (STACK *)malloc(sizeof(STACK))) == NULL){
		OK = FLASE;
	}else if(OK && (*head)){
		(*head)->maxRoom = maxRoom;
		(*head)->top = 0;
		(*head)->stack = (USER_TYPE *)malloc(sizeof(USER_TYPE)*maxRoom);
		if((*head)->stack == NULL){
			free((*head));
			*head = NULL;
			OK = FLASE;
		}
	}

	return OK;
}


#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值