堆栈的线性存储(顺序栈)和链式存储(链栈)

本文介绍了堆栈的基本概念,并详细探讨了顺序栈和链栈的实现方式。顺序栈通过数组实现,使用一个标记跟踪栈顶位置;初始化、入栈和出栈操作也进行了说明。接着,文章讨论了双栈的实现,让两个栈共享一个数组,从两端向中间增长。最后,介绍了链栈的概念,分析了以链表头为栈顶的优劣,并展示了链栈的初始化、入栈和出栈操作。
摘要由CSDN通过智能技术生成

堆栈(Stack)是有约束的线性表,插入和删除都只能在表的同一端。

对于用数组来实现的话,我们一般把数组起始位置作为栈底,把下标越来越大的部分作为栈顶。这样就需要一个标记来表示当前栈顶的位置。

顺序栈:

typedef int elementType;
typedef int position;
struct StackNode{
    elementType * Data;//表示堆栈的数组
    position  top;     //标记栈顶的位置
    int MAXSIZE;       //最大空间
};
typedef struct StackNode * Stack;

初始化一个空的顺序栈就可以这样:

Stack makeEmptyStack(int MAXSIZE){
    Stack s = (Stack)malloc(sizeof(struct StackNode)); //申请堆栈内存
    s->MAXSIZE = MAXSIZE; //根据传入的参数决定数组大小
    s->Data = (elementType*)malloc(MAXSIZE*sizeof(elementType));//申请数组内存
    s->top  = -1; //-1表示当前栈的元素为空
    return s;
}

入栈:

//入栈push
bool pushStack(Stack s, elementType x){
if (s->MAXSIZE-1 == s->top){ //当栈顶标记到达最大的位置时 栈已满
    printf("堆栈已满\n");
    return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值