数据结构与算法——栈的表示和实现-ag九游会j9官方网站

ag九游会j9官方网站-j9九游会登录入口首页新版
数据结构与算法——栈的表示和实现
2023-06-29
16 浏览
江海入海,知识涌动,这是我参与江海计划的第7篇
目录

1.栈的抽象数据类型的定义

2.顺序栈的表示和实现编辑

3.顺序栈的初始化

4.判断栈是否为空

5.求顺序栈的长度

6.清空顺序栈

7.销毁顺序栈

8.顺序栈的入栈

9.栈的出栈(顺序栈)

1.栈的抽象数据类型的定义
adt stack{

       数据对象:

                       d={ai|ai属于elemset,i=1,2,...,n,n>=0}

       数据关系:

                       r1={|ai-1,ai属于d,i=2,...,n}

                               an端为栈顶,a1端为栈底

       基本操作:

                       初始化,进栈,出栈,取栈顶元素等。

}adt stack

2.顺序栈的表示和实现
栈的顺序存储——顺序栈

栈的链式存储——链栈

存储方式:

同一般线性表的顺序存储结构完全相同

利用一组地址连续的存储单元依次存放,自栈底到栈顶的数据元素,栈低一般在低地址端

附设top指针,指示栈顶元素在顺序栈的位置

另外base指针,指示栈底元素在顺序战中的位置

3.顺序栈的初始化
status initstack(s1stack &s){
   //构造一个空栈
   s.base=new selemytype[maxsize];
   if(!s.base)
   exit(overflow);  //存储分配失败
   s.top=s.base; //栈顶指针等于栈底指针
   s.stacksize=maxsize;
   return ok;
}
4.判断栈是否为空
status stackempty(sqstack s){
                   //若栈为空,返回true;否则返回false
           if(s.top=s.base)
           return true;
           else
           return false;
}
5.求顺序栈的长度
in stacklength(sqstack s)
{
  return s.top-s.base;
}
6.清空顺序栈
status clearstack(sqstack s){
       if(s.base)
       s.top=s.base
               //如果s.base存在将s.base赋值给s.top
       return ok;
}
7.销毁顺序栈
status destroystack(aqstack &s){
   if(s.base){
       delete s.base;
       s.stacksize=0;
       s.base=s.top=null;  //若不置为空则s.base与s.top 为也指针
       }
   return ok;
}
8.顺序栈的入栈
判是否栈满,若满则出错(上溢)
元素e压入栈顶
栈顶指针加一
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;
}
9.栈的出栈(顺序栈)
判断是否栈空,若空则出错(下溢)
栈指针减一
获取栈顶元素e
status pop(sqstack &s,selemtype e){
   //若栈不空则删除栈顶元素,用e返回其值,并返回ok;否则返回error
   if(s.top==s.base)  //等价于if(stackemptu (s))
   return error;
   e=*--s.top;
   return ok;
}
avatarname
后发表内容
您的社区活跃积分 3,登录后即可领取  
网站地图