个人主页:bit..
系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法
目录
1.栈的抽象数据类型的定义
2.顺序栈的表示和实现编辑
3.顺序栈的初始化
4.判断栈是否为空
5.求顺序栈的长度
6.清空顺序栈
7.销毁顺序栈
8.顺序栈的入栈
9.栈的出栈(顺序栈)
ADT stack{
数据对象:
D={ai|ai属于ElemSet,i=1,2,...,n,n>=0}
数据关系:
R1={
|ai-1,ai属于D,i=2,...,n} an端为栈顶,a1端为栈底
基本操作:
初始化,进栈,出栈,取栈顶元素等。
}ADT stack
栈的顺序存储——顺序栈
栈的链式存储——链栈
存储方式:
同一般线性表的顺序存储结构完全相同
利用一组地址连续的存储单元依次存放,自栈底到栈顶的数据元素,栈低一般在低地址端
附设top指针,指示栈顶元素在顺序栈的位置
另外base指针,指示栈底元素在顺序战中的位置
status Initstack(s1stack &s){
//构造一个空栈
s.base=new SElemyType[MAXSIZE];
if(!s.base)
exit(OVERFLOW); //存储分配失败
s.top=s.base; //栈顶指针等于栈底指针
s.stacksize=MAXSIZE;
return ok;
}
status stackEmpty(sqstack s){
//若栈为空,返回TRUE;否则返回FALSE
if(s.top=s.base)
return TRUE;
else
return FALSE;
}
in stackLength(sqstack s)
{
return s.top-s.base;
}
status clearstack(sqstack s){
if(s.base)
s.top=s.base
//如果s.base存在将s.base赋值给s.top
return ok;
}
status Destroystack(aqstack &s){
if(s.base){
delete s.base;
s.stacksize=0;
s.base=s.top=NULL; //若不置为空则s.base与s.top 为也指针
}
return ok;
}
status push(sqstack &s,SElemType e){
if(s.top-s.base==s.stacksize) //栈满
return ERROR;
*s.top++=e; //或者*s.top=e; s.top++;
return ok;
}
status pop(sqstack &s,sElemType e){
//若栈不空则删除栈顶元素,用e返回其值,并返回ok;否则返回ERROR
if(s.top==s.base) //等价于if(stackEmptu (s))
return ERROR;
e=*--s.top;
return ok;
}