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

本文围绕顺序栈展开,介绍了栈的抽象数据类型定义,包括数据对象、关系和基本操作。阐述了顺序栈的表示和实现,利用连续存储单元存储数据,附设top和base指针。还详细说明了顺序栈的初始化、判空、求长、清空、销毁、入栈和出栈等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🍓个人主页: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>|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;
}

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bit..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值