顺序栈的实现

顺序栈的实现相对较为容易,但是应用极其广泛强大。

/*
**  SqStack.h
*/
#ifndef SQSTACK_H
#define SQSTACK_H

#include <stdio.h>
#include <stdlib.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef int SElemType;
typedef int Status;

typedef struct 
{
    SElemType *base;//栈底指针
    SElemType *top; //指向栈顶元素的上一个位置
    int stacksize;  //栈分配的当前容量大小
}SqStack;

void InitStack(SqStack &s);
void Push(SqStack &s, SElemType e);
Status GetTop(SqStack &s);
Status StackLength(const SqStack s);
void Pop(SqStack &s);

#endif // !SQSTACK_H
/*
**  SqStack.cpp
*/
#include "SqStack.h"

void InitStack(SqStack &s)
{
    s.base = (SElemType*)malloc(sizeof(SqStack)*STACK_INIT_SIZE);
    if(!s.base)
        printf("存储空间分配失败");
    s.top = s.base;
    s.stacksize = STACK_INIT_SIZE;
}

void Push(SqStack &s, SElemType e)
{
    if(s.top - s.base  >= s.stacksize)
    {
        s.base = (SElemType*)realloc(s.base, (s.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!s.base)
            printf("没有多余空间可利用");
        s.top = s.base + s.stacksize;
        s.stacksize += STACKINCREMENT;
    }
    *s.top = e;
    ++s.top;
}

Status GetTop(SqStack &s)
{
    if(s.base == s.top)
        printf("栈空\n");
    return *(s.top-1);
}

Status StackLength(const SqStack s)
{
    return (s.top - s.base);
}

void Pop(SqStack &s)
{
    if(s.top == s.base)
        printf("栈空\n");
    --s.top;
}
/*
**  main.cpp
*/
#include "SqStack.h"

int main()
{
    SqStack s;
    InitStack(s);

    for(int i = 0; i < 5; i++)
        Push(s, i);

    printf("栈中元素个数为:%d\n", StackLength(s));
    printf("栈顶元素为:%d\n", GetTop(s));

    Pop(s);
    printf("栈中元素个数为:%d\n", StackLength(s));
    printf("栈顶元素为:%d\n", GetTop(s));

    return 0;
}

运行结果图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值