栈(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;
}