栈的实现----链栈

/*
Name: 栈的链式实现
Copyright:
Author:
Date:
Description:
*/

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED

#include "ds.h" //for Status,OK ...

#ifndef ElemType
#define ElemType int /* 数据元素类型默认为 int */
#define ELEMTYPE_TAG
#endif


///
//链栈的存储结构定义
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;

typedef LinkList LinkStack; //链栈类型

///
//链栈的基本操作声明

//构造一个空栈S
Status InitStack(LinkStack &S);
//销毁栈S
Status DestroyStack(LinkStack &S);
//将栈S清空
Status ClearStack(LinkStack &S);
//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(LinkStack S);
//返回栈S中的元素个数
int StackLength(LinkStack S);
//用e返回栈顶元素
// 前提:栈S存在且不空
Status GetTop(LinkStack S, ElemType &e);
//元素e入栈S
Status Push(LinkStack &S, ElemType e);
//S出栈用e返回出栈元素
// 前提:栈S存在且不空
Status Pop(LinkStack &S, ElemType &e);

///
//链栈的基本操作的实现

//构造一个空栈S
Status InitStack(LinkStack &S)
{ S=NULL;
// TODO (#1#): 构造一个空栈S,不带头结点
return OK;
//-------------------------------------
}

//销毁栈S
Status DestroyStack(LinkStack &S)
{
// TODO (#1#):销毁栈S,相当于清空栈
return ERROR;
//-------------------------------------
}

//将栈S清空
Status ClearStack(LinkStack &S)
{ S=NULL;
// TODO (#1#): 将栈S清空,释放所有结点
return OK;
//-------------------------------------
}

//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(LinkStack S)
{ if(S==NULL) return true;
else return false;
// TODO (#1#): 若栈S为空返回TRUE,否则FALSE
//-------------------------------------
}

//返回栈S中的元素个数
int StackLength(LinkStack S)
{ int i=0;
LNode* p=S;
while(p){
p=p->next;
i++;
}
// TODO (#1#): 返回栈S中的元素个数
return i;
//-------------------------------------
}

//用e返回栈顶元素
// 前提:栈S存在且不空
Status GetTop(LinkStack S, ElemType &e)
{ if(S==NULL) return ERROR;
e=S->data;
// TODO (#1#):若栈S不空,则用e返回栈顶元素
return OK;
//-------------------------------------
}

//元素e入栈S
Status Push(LinkStack &S, ElemType e)
{ LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=e;
q->next=S;
S=q;
// TODO (#1#): 插入元素e作为新的栈顶
return OK;
//-------------------------------------
}

//S出栈用e返回出栈元素
// 前提:栈S存在且不空
Status Pop(LinkStack &S, ElemType &e)
{ if(S==NULL) return ERROR;
LNode* q=S;
e=q->data;
S=q->next ;
free(q);
// TODO (#1#):若栈S不空,则删除栈顶元素用e返回
return OK;
//-------------------------------------
}


#ifdef ELEMTYPE_TAG
#undef ElemType
#undef ELEMTYPE_TAG
#endif

#endif

 

转载于:https://www.cnblogs.com/spsglz/p/7674137.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值