数据结构考研复习(自用非408)栈——附代码

1.栈的定义:

        栈是操作受限的线性表,只允许在某一端进行插入或删除。

        栈顶:允许插入或删除操作的一端。

        栈底:固定的,不能进行插入或者删除操作的一端。

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

        栈的操作特性:先行后出。

        栈的数学性质:n个不同的元素进栈,出栈元素不同的排列的个数为\frac{1}{n+1}C_{2n}^{n}\textrm{}。这个数被称为卡特兰数。

2,顺序栈:

        基本实现:用一个指示当前栈顶元素的指针top来表示栈顶位置。

3,共享栈:

        两个栈共享同一个数组空间,两个栈的栈底分别在栈的两端,向中间延伸。

        两个栈的栈顶指针都指向栈顶元素,top1 = -1时1号栈为空,top2 = MaxSize -1时2号栈为空,当两个栈顶指针相邻时栈满(top2 - top1 = 1)

        

#define MaxSize 50
typedef struct{
    int data[MaxSize];
    int top;
}SqStack;

        栈顶指针为S.top,初始时top = -1,当S.top = MaxSize - 1 时表示栈满,S.top = -1时表示栈为空。

void InitStack(SqStack &S){
    S.top = -1;     //初始化栈顶指针
}
bool StackEmpty(SqStack S){     //判断栈是否为空
    if(S.top == -1){
        return true;
    }
    return false;
}

        入栈操作:当栈不满时,栈顶指针先加一再赋值

bool Push(SqStack &S,int e){        //进栈操作
    if(S.top == MaxSize-1){
        return false;
    }
    S.top++;
    S.data[S.top] = e;
    return true;
}

        出栈操作:当栈不为空时,栈顶指针先赋值再减一

bool Pop(SqStack &S,int &e){        //出栈操作
    if(S.top == -1){
        return false;
    }
    e = S.data[S.top];
    S.top--;
    return true;
}

        读栈顶元素

bool Get(SqStack S,int &x){     //读栈顶元素
    if(S.top == -1){
        return false;
    }
    x = S.data[S.top];
    return true;
}

完整代码

#include<stdio.h>

#define MaxSize 50
typedef struct{
    int data[MaxSize];
    int top;
}SqStack;

void InitStack(SqStack &S){
    S.top = -1;     //初始化栈顶指针
}

bool StackEmpty(SqStack S){     //判断栈是否为空
    if(S.top == -1){
        return true;
    }
    return false;
}

bool Push(SqStack &S,int e){        //进栈操作
    if(S.top == MaxSize-1){
        return false;
    }
    S.top++;
    S.data[S.top] = e;
    return true;
}

bool Pop(SqStack &S,int &e){        //出栈操作
    if(S.top == -1){
        return false;
    }
    e = S.data[S.top];
    S.top--;
    return true;
}

bool Get(SqStack S,int &x){     //读栈顶元素
    if(S.top == -1){
        return false;
    }
    x = S.data[S.top];
    return true;
}

int main(){
    SqStack S;
    int e,x;
    InitStack(S);
    Push(S,3);
    Push(S,4);
    Push(S,2);
    Pop(S,e);
    Get(S,x);
    printf("%d",x);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值