堆栈的链式存储的C++实现与测试

采用单链表来实现堆栈需要考虑一个问题:使用表头作为栈顶还是表尾作为栈顶?

如果使用表尾作栈顶,进栈时在表尾插入一个新元素很方便,但出栈时删除最后一个结点时,需要从头开始查找倒数第二个元素并置其指针域为空。

使用表头则没有这种情况发生,本程序即采用表头作为栈顶。



/*堆栈的链式存储的C++实现与测试*/

#include<iostream>
using namespace std;
#define ERROR -100/*定义函数异常时的返回值*/
typedef int ElementType;
typedef struct SNode *Lstack;/*定义一个间接访问堆栈的数据结构*/
/*定义结构体*/
struct SNode{
ElementType Data;/*数据域*/
Lstack next;/*指针域*/
};
/*新建一个空堆栈*/
Lstack CreateEmpty(){
Lstack Ptrs;
Ptrs=(Lstack)malloc(sizeof(struct SNode));/*新建新结点并分配空间*/
Ptrs->next=NULL;/*定义为空链表*/
return Ptrs;
}
/*入栈*/
Lstack Push(Lstack Ptrs,ElementType x){
Lstack s;
s=(Lstack)malloc(sizeof(struct SNode));
s->Data=x;/*定义一个结点,分配空间并赋值,该节点为新入栈元素*/
s->next=Ptrs;/*将原链表接到入栈元素后边*/
Ptrs=s;/*将新链表赋值给原链表并返回*/
return Ptrs;
}
/*出栈*/
ElementType Pop(Lstack Ptrs){
ElementType n;/*存储出栈元素数值*/
Lstack s;/*定义一个指针*/
if(Ptrs->next ==NULL){
cout<<"empty"<<endl;
return ERROR;
}/*栈空则返回错误*/
n=Ptrs->Data;/*将第一个节点也就是栈顶的数值赋给n*/
s=Ptrs;/*s指向原链表头结点*/
Ptrs=Ptrs->next;/*新链表从原链表第二个结点开始*/
free(s);/*释放原链表的第一个节点空间*/
return n;/*返回栈顶值*/
}
/*测试*/
int main(){
Lstack L;
int k;/*存储栈顶元素*/
L=CreateEmpty();/*初始化一个空栈*/
L=Push(L,3);/*将3入栈*/
k=Pop(L);
cout<<k<<endl;/*3出栈*/
return 0;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值