LinkStack

#include<stdio.h>
#include<algorithm>
using namespace std;

typedef struct DataNode{
	int elem;
	struct DataNode *next;
}DataNode;

typedef struct {
	int count;
	DataNode *next;
}HeadNode,*hnode;

int InitStack(hnode *S)
{
	hnode p=(HeadNode *)malloc(sizeof(HeadNode));
	if(p==NULL)
	{
		return -1;
	}
	p->count=0;
	p->next = NULL;
	
	(*S)=p;
	return 0;
 } 
 
 int Push(hnode *S,int elem)
 {
 	DataNode *s=(DataNode *)malloc(sizeof(DataNode)); 
 	if(s==NULL)
 	{
 		return -1;
	 }
 	s->elem = elem;
 	s->next = (*S)->next;
	 (*S)->next=s;
	 (*S)->count+=1; 
 	return 0;
 }
 
 int Pop(hnode *S,int *elem)
 {
 	if((*S)==NULL)//栈不存在 
 	{
 		return -1;
	 }
 	DataNode *s=(*S)->next;
 	if(s==NULL)//空栈 
 	{
 		return -1; 
	 } 
 	*elem = s->elem;
 	(*S)->next = s->next;
 	free(s);
 	(*S)->count-=1;
 	return 0;
 }
 
 
 
 int ClearStack(hnode *S)
 {
 	DataNode *p;
 	if(p==NULL)
 	{
 		return -1;
	 }
 	while((*S)->count==0)
 	{	
	 	p=(*S)->next;
 		(*S)->next=p->next;
 		free(p);
 		(*S)->count-=1;
	 }
 	return 0;
 }
 
 int Deatory(hnode *S)
 {
 	DataNode *p;
 	
 	while((*S)->next != NULL)
 	{
 		p=(*S)->next;
 		(*S)->next = p->next;
 		free(p);
	 }
 	free(*S);
 	(*S)=NULL;
 	return 0;
 }
 
 int Stacklength(hnode S)
 {
 	return S->count;
 }
 int Getelem(hnode S,int *elem)
 {
 	DataNode *s=S->next;
	 if(s==NULL)
	 {
	 	return -1;
	  } 
 	*elem = s->elem;
 	return 0;
 }
 
 int Traverse(hnode S)
 {
 	DataNode *s=S->next;
 	
 	for(int i=0;i<S->count;i++)
 	{
 		printf("%d",s->elem);
 		s=s->next;
	 }
 	return 0;
 }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值