《数据结构与算法》——表、栈和队列(顺序栈)

本文详细介绍了栈的概念,包括栈顶、栈底、空栈、入栈和出栈操作。栈遵循后进先出(LIFO)原则,并且只允许在栈顶进行操作。展示了顺序栈的结构定义,包括如何处理溢出和下溢的情况。同时提供了顺序栈的入栈、出栈和取栈顶元素的C语言实现。
摘要由CSDN通过智能技术生成

栈的定义及概念:
栈是限定在表的同一端进行插入或删除操作的线性表。

栈顶:进行插入或删除操作的一端
栈底:与栈顶的另一端
空栈:没有数据元素的栈
入栈:插入数据元素
出栈:删除数据元素
栈具有后进先出、先进后出的特点。
栈只能在栈顶进行操作

栈的基本操作:
在这里插入图片描述
栈的顺序存储类型定义:

typedef struct stack{
    int top;//就是线性表存储结构的length
    StackEntry *elem;//动态分配空间大小为stack_size
    int stack_size;
}Stack,*Stackptr;

约定top用于存放栈顶元素的位置,top=-1表示空栈,top=stack_size表示栈满。
在这里插入图片描述

溢出:
1、顺序栈的数据元素空间大小是预先分配。
2、当空间全部占满后再入栈产生的溢出为上溢。
3、当栈为空再出栈产生的溢出为下溢。

顺序栈入栈操作:
其中,StackEntry为数据元素类型(int,float,char等等)

Status push(Stackptr s;StackEntry item){
    Status a=success;
    if(Stack_Full(s)){
        a=overflow;//
    }
    else{
        s->top++;
        s->entry[s->top]=item;
    }
    return a;
}

顺序栈出栈操作:
其中,StackEntry为数据元素类型(int,float,char等等)

Status pop(Stackptr s,StackEntry *item)
{
    Status a=success;
    if(s->top==-1){
        a=underflow;//栈空则下溢
    }
    else{
        *item=s->entry[s->top--];//将top所指元素放入item,top再减一
    }
    return a;
}

取栈顶元素操作:
其中,StackEntry为数据元素类型(int,float,char等等)

Status top(Stackptr s,StackEntry *item)
{
    Status a=success;
    if(s->top==-1){
        a=underflow;//栈空则下溢
    }
    else{
        *item=s->entry[s->top];//取出top所指数据,top不变
    }
    return a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值