c语言栈的实现

栈的定义:栈是一个先入后出表,类似于食堂阿姨放盘子和取盘子的过程。对栈的操作必须放在最新的元素上,即栈顶元素。

用物理线性解构实现栈的操作:

首先定义一个结构体作为栈的控制头

typedef struct SeqStack{
	int maxRoom;//栈的最大容量
	USER_TYPE *data;//栈存储空间的首地址
	int top;//栈顶指针
}PSeqStack;
栈的初始化操作:
int creatEmptyStack(PSeqStack **stack, int maxRoom)
{
	if(*stack != NULL){
		printf("栈存在,不能初始化");
		return FALSE;
de	}//如果指向结构体PSeqStack的指针不是NULL,则证明不能初始化

	(*stack) = (PSeqStack*)malloc(sizeof(PSeqStack));//申请控制头的空间
	(*stack)->maxRoom = maxRoom;//最大元素数量是maxRoom
	(*stack)->top = -1;//top指向的值是-1
	(*stack)->data = (USER_TYPE*)malloc(sizeof(USER_TYPE)*maxRoom);//申请数组元素空间
	return TRUE;		
}
栈的判空操作
int isEmptyStack(PSeqStack stack)
{
	if(stack.top == -1)//空
		return TRUE;
	else //非空
		return FALSE;
}
栈的判满操作

int isFullStack(PSeqStack stack)//栈满返回真,否则返回假
{
	printf("stack.maxRoom = %d, stack.top = %d\n", stack.maxRoom, stack.top );
	if (stack.top == stack.maxRoom-1)//栈为满时候,指针指向最后一个元素的		return TRUE;
		return TRUE;
	return FALSE;	
										//下标为maxRoom-1
}

入栈操作:

int push(PSeqStack *stack, USER_TYPE data)
{
	if(isFullStack(*stack))//首先看栈是否已满
	{
		printf("栈已满,不能入栈");
		return FALSE;
	}
	stack->top++;//栈顶指针上移
	stack->data[stack->top] = data;//入栈
	return TRUE;
}
出栈操作:
int pop(PSeqStack *stack, USER_TYPE *data)
{
	if(isEmptyStack(*stack) == TRUE){
		printf("栈空了,读不出来");
		return FALSE;
	}
	*data = stack->data[stack->top];//删除的元素放到data中
	stack->top--;//栈顶元素下移
	return TRUE;
}

读栈顶元素

int readTop(PSeqStack stack)
{
	if(isEmptyStack(stack) == TRUE)
	{
		printf("栈空了,不能读了\n");
		return FALSE;
	}
	return stack.data[stack.top];
}
销毁栈

void destoryStack(PSeqStack **stack)
{
	if(*stack != NULL)//指向控制头的指针不等于NULL,即栈存在
	{
		if((*stack)->data != NULL)
		{
			free((*stack)->data);
			free(*stack);
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值