#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define MAXSIZE 100
using namespace std;
//top指针,指向栈顶元素的下一个位置的地址
//base指针,指向栈底元素。
//stacksize,表示栈可使用的最大容量。
//空栈,top和base都指向数组a[0]位置
//有元素进栈后,top指向栈顶元素的下一位置
// 栈满:top-base=stacksize
//出栈,top指针后移,上限为top=base
//上溢:栈已满还要插入元素
//下溢:反之
//返回值为-1为错误,返回值为正确为1
typedef struct {
int*base;
int*top;
int stacksize;
}sqstack;
//构造一个空栈
int initstack(sqstack&s){
s.base=(int*)malloc(MAXSIZE*sizeof(int));
if(s.base==NULL)exit(-1);//内存分配失败
s.top=s.base;
s.stacksize=MAXSIZE;
return 1;
}
//判断是否为空栈
int isempty(sqstack s){
if(s.base=s.top)return 1;
else return -1;
}
//求栈的元素个数
int stacklength(sqstack s){
return s.top-s.base;
}
//清空栈
int clearstack(sqstack s){
s.top=s.base;//因为此后入站的新元素会覆盖原来的值,所以只需要逻辑上的清空。
return 1;
}
//入栈
int push(sqstack&s,int elem){
if(s.top-s.base==s.stacksize) return -1;
else *s.top++=elem;//先取值,后上移。
return 1;
}
//出栈
int pop(sqstack&s,int&elem){
if(s.top-s.base==0) return -1;
else elem=*--s.top;//注意是先将top指针下移,在取值。
return 1;
}
int main()
{
system("pause");
return 0;
}
顺序栈的实现(严蔚敏版)
最新推荐文章于 2024-09-28 22:22:29 发布