数据结构与算法——栈的表示和实现

个人主页:bit.. 

系列专栏:Linux(Ubuntu)入门必看   C语言刷题      数据结构与算法

目录

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指针,指示栈底元素在顺序战中的位置

数据结构与算法——栈的表示和实现_第1张图片 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;
}

你可能感兴趣的:(数据结构与算法,数据结构,栈)