栈的c语言和c++实现

栈(stack)是一种,先入后出的数据结构,它只有一个出口。栈允许新增元素,移除元素取得最顶端元素,但是除了最顶端之外,没有方法可以存取栈的其他元素,栈的遍历是不存在的(从头到尾出栈)

c语言实现

    栈有两种存储结构顺序存储结构和链式存储结构 在这里我们考考虑顺序存储结构,考虑栈线性表构成 表尾端我们称为栈顶top,表头段称为栈底。没有元素的称为空栈。因此定义一个栈可以考虑三个地方 两个指针一个栈底base指针,和一个栈顶top指针,详细代码如下:

/*栈的数据结构实现
by zhf 03 27
*/
#define STACKSIZE 20
#define STACKINCREMENT 10
typedef struct{
int *base;
int *pop;
int stacksize;
}sqStack;
//初始化栈
void InitsqStack(sqStack *s){//这个地方的形参到底是‘&’类型好 还是‘*’类型好 有啥区别
s->base=(int *)malloc(stacksize*sizeof(int));
if(!s->base){
printf("分配失败");
}
s->pop=s->base;
s->stacksize=STACKSIZE;
}
//求栈顶元素
int GetTop(sqStack *s,int Topelement){
if(s->top=s->base){
printf("空栈");
}else{
Topelement=*(s->(top-1));
return Topelement;
}

}
//入栈 操作
void Push(sqStack *s,int e){
if(s.top-s.base>s.stacksize){//栈满需要重新分配内存
s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));//重新分配空间这块需要多琢磨
if(!s->base){
printf("分配失败");
exit(0);
}
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
}
//出栈操作
void Pop(sqStack *s,int *e){
if(s->base=s->top){//判断是否为空
exit(0);
}
s->top--;
*e=*s->top;

}

c++实现

    以stl模板中的deque(双端队列)考虑,我们以此构成栈的底部结构并封闭其头端开口,以此形成栈 只有栈的顶端元素才会被访问 栈不提供走访功能 没有迭代器,采用方法常有push()和pop。

#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
int main(){
stack<int>s;
//入栈操作
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
cout<<s.size()<<endl;
cout<<s.top()<<endl;
s.pop();//出栈操作
cout<<s.top()<<endl;


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值