栈、队列、数组和串

一、栈的基本概念

1、栈的定义

栈:只允许在一端进行删除和插入,是一种受限的线性表。又被称为后进先出Last In First Out)的线性表,简称LIFO结构。

栈顶(top):线性表允许插入和删除的那一端

栈底(bottom):固定的,不允许插入和删除

空栈:不含任何元素的空表

2、栈的基本操作

初始化:InitStack(&s)

判空:EmptyStack(&s)

增:Push(&s, x)

删:Pop(&s, x)

查:GetTop(&s,x)

注:当n个不同元素入栈时,出栈元素不同排列组合数为\frac{1}{n}\binom{2n}{n}

二、顺序栈

1、栈的顺序存储

        采用顺序存储的栈成为顺序栈,它是由一组连续的存储结构来进行存储的,同时附设一个指针来表示当前栈顶元素的位置。若存储栈的长度为S.size(),则栈顶位置top必须小于S.size()。当栈中存在一个元素时,top=0,通常把空栈的判定条件为top=-1。

 #define MAXSIZE 10000 //定义栈中元素的最大个数
 typedef int ElemType;
 typedef struct{
    ElemType data[MAXSIZE];
    int top;
 }sqStack;
2、顺序栈的基本算法

(1)初始化

 void InitStack(SqStack &S) {
    S.top = -1;
   };

(2)判栈空

bool EmptyStack(&s) {
    if (top == -1)
        return true;
    else
        return false;
};

(3)进栈

status Push(Sqstack *S, ElemTyp e) {
    //判断栈是否已满
    if (S.top == MaxSizxe - 1) {
        return false;
    }
    S.data[++S.top] = e;
    return true;
}

(4)出栈

status Push(Sqstack *S, ElemTyp *e) {
    //判断栈是否为空
    if (S.top == -1) {
        return false;
    }
    S.data[S.top--] = e;
    return true;
}

(5)查看栈顶元素

status Push(Sqstack *S, ElemTyp e) {
    //判断栈是否为空
    if (S.top == -1) {
        return false;
    }
    *e = S.data[S.top];
    return true;
}

3、共享栈

        利用栈底位置相对不变的特征,两个顺序栈可以共同使用一个空间,将两个栈底分别设置在栈底,栈顶向中间延伸。

        两个栈的栈顶指针都指向栈顶元素,top0=-1时0号栈为空,top0=MaxSize时1号栈为空。当top1=top0+1时判断为栈满。当0号栈每次有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值