数据结构之栈及其基本操作

栈的顺序存储表示

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10;
typedef struct
{
    int *base;
    int top;
    int stacksize;
}sqstack;

构造一个空栈
在定义了栈的基本结构后,按照设定的分配量size分配结点指针所指的内存的空间,base名为栈底指针,指向栈底部元素的内存。top名为栈顶指针,初始化与base指针指向相同,栈的内存设置为size变量。插入与删除元素之时,仅仅需要移动栈顶指针即可。由栈的指针的结构可以看出,非空栈的栈顶指针始终指向的是栈顶元素的上一个位置,这与顺序表插入节点的操作也是类似的。顺序栈的结构初始化代码如下:

status InitStack(sqstack&s)
{
    s.base=(int*)malloc(STACK_INT_SIZE*sizeof(int));
    if(!s.base)
        exit(0);
        s.top=s.base;
    s.stacksize=STACK_INT_SIZE;
    return 1;
}

入栈
先检查栈是否已满,若已满则继续申请空间,然后在使元素入栈

status push(sqstack&s,int &e)
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(int*)realloc((s.stacksize+STACKINCREMENT)*sizeof(int));
        if(!s.base)
            exit(-2);
        s.top=s.base+s.stacksize;
        s.stacksize=s.stacksize+STACKINCREMENT;
    }
    *s.top++=e;
    
}

出栈

status pop(sqstack &s,int &e)
{
    if(s.top==s.base)
        return 0;
    e=*--s.top;
    return 1;
}

返回栈顶元素

status gettop(sqstack &s,int &e)
{
    if(s.top==s.base)
        return 0;
    e=*(s.top-1);//必须加括号
    return 1;
}

栈是否为空

bool stackempty(sqstack &s)
{
    if(s.top==s.base)
    {
        return true; 
    }
    else
    {
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值