学习笔记:大话数据结构-栈

本文详细介绍了栈的定义、顺序存储结构和链式存储结构,包括两栈共享空间的技巧。同时阐述了栈在递归和四则表达式求值中的应用。此外,还讨论了队列的概念,分析了循环队列和链队列的存储结构及其特点。
摘要由CSDN通过智能技术生成

大话数据结构-栈

栈的定义

stack是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底

  • 栈又称为后进先出的线性表,简称LIFO结构
  • 栈的插入操作,为压栈、入栈;栈的删除操作,为出栈
typedef int SElemType; /*SElemType类型根据实际情况而定,这里假设为int*/
typedef struct
{
   
    SElemType data[MAXSIZE];
    int top; /*空栈top=-1,栈满etc*/
}SqStack;
栈的顺序存储结构
/*进栈操作 插入元素e为新的栈顶元素*/
Status Push(SqStack *S,SElemType e)
{
   
    if(S->top == MAXSIZE -1) /*栈满*/
    {
   
        return ERROR;
    }
    S->top++; /*栈顶指针增加一*/
    S->data[S->top] = e; /*将新插入元素赋值给栈顶空间*/
    return OK;
}
/*出栈操作:若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop(SqStack *S,SElemType *e)
{
   
    if(S->top == -1)
        return ERROR;
    *e=S->data[S->top]; /*将要删除的栈顶元素赋值给e*/
    S->top--; /*栈顶指针减一*/
    return OK;
}

两栈共享空间——使用数组来存储两个栈

  1. 相同类型的栈的设计技巧
  2. top1+1==top2(栈满);栈1为空栈,top2=0,栈2满;栈2为空栈,栈1的top1为n-1,栈1满。
/*两栈共享空间结构*/
typedef struct
{
   
    SElemType data[MAXSIZE];
    int top1; /*栈1栈顶指针*/
    int top2; /*栈2栈顶指针*/
}SqDoubleStack;

Status Push(SqDoubleStack *S,SElemType e, int stacklNumber)
{
   
    if(S->top1+1==S->top2) /*栈满
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值