第三章:1.3-栈的链式存储结构及操作实现

1.链栈的结构

其节点结构与单链表的结构相同,即节点结构为:

typedef struct node{
	DataType data;
	struct node *next;   
}StackNode,*PStackNode;

定义一个栈:

typedef struct{
	PStackNode top;
}LinkStack,*PLinkStack;
	PLinkStack S;
	S=(PLinkStack)malloc(sizeof(LinkStack));

栈的链式存储图如下:在这里插入图片描述

2.初始化空栈

/***
   初始化链栈,入口参数:空
   返回值:链栈指针,null表示初始化失败
***/
PLinkStack Init_LinkStack()
{
	PLinkStack S;
	S=(PLinkStack)malloc(sizeof(LinkStack));
	if(s)
	 S->top=NULL;
	return (S);
}

3.判栈空

/***
   判断链栈是否为空,入口参数:链栈指针
   返回值:1栈空,0非空
***/
int Empty_LinkStack(PLinkStack S)
{
	return(S->top==NULL)
}

4.入栈

/***
   入口参数:链栈指针,进栈元素
   返回值:1成功,0失败
***/
int Push_LinkStack(PLinkStack S,DataType x)
{
	PStackNode p;
	p=(PStackNode)malloc(sizeof(StackNode));   //申请节点存储空间
	if(!p)
	{
		printf("内存溢出");
		return(0);
	}
	p->data=x;               
	p->next=S->top;      
	S->top=p->next;
	return (1);
}

5.出栈

/***
   出栈,返回值:1成功,0失败,*X保存被删除的元素值
***/
int Pop_LinkStack(PLinkStack S,Datatype *x)
{
	PLinkStack p;
	if(Empty_LinkStack(S))
	{
		printf("栈空,不能出栈");
		return 0;
	}
	 *x=S->top->data;
	 p=S->top;
	 S->top=S->top->next;
	 free(p);
	 return (1);
}

6.取栈顶元素

/***
    取栈顶元素  入口参数:链栈指针,出栈元素存放空间地址
    返回值:1成功,0失败
***/
int GetTop_LinkStack(PLinkStack S,DataType *x)
{
	if(Empty_LinkStack(S))
	{
		printf("栈空");
		return(0);
	}
	*x=S->top->data;
	return(1);
}

7.销毁栈

链栈被构造,使用完后,必须要销毁,否则可能会造成申请的内存不能被释放

/***
   销毁栈,入口参数:要销毁的链栈指针地址,无返回值
***/
void Destory_LinkStack(PLinkStack LS)
{
	PStackNode p,q;
	if(*LS)
	{
		p=(*LS)->top;
		while(p)
		{
			q=p;
			p=p->next;
			free(q);
		}
		free(*LS);
	}
	*LS=NULL;
	return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值