顺序栈的基本操作(严蔚敏版数据结构)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int SElemType;

typedef struct//顺序栈的存储结构
{
    SElemType* base;//栈底指针
    SElemType* top;//栈顶指针
    SElemType Stacksize;//栈的最大长度
}SqStack;

//栈的初始化,建立一个空栈
void InitStack(SqStack &S)
{
    S.base = new SElemType[MAXSIZE];//S.base=(SElemType*)malloc(MAXSIZE*sizeof(ElemType))
    if (!S.base)
    {
        exit;
    }
    S.top = S.base;//栈底等于栈顶,即建造一个空栈
    S.Stacksize = MAXSIZE;
}

//入栈
int Push(SqStack &S, SElemType e)
{
    if (S.top - S.base == S.Stacksize)//栈满,不是S.top==S.base
    {
        return 0;
    }
    *S.top = e;
    S.top++;//先把元素压栈,再移动指针,因为top指向的是最上面元素的上一个位置
    return 1;
}

//出栈
int Pop(SqStack& S, SElemType e)
{
    if (S.top == S.base)
        return 0;//栈空
    S.top--;
    e = *S.top;//先移动指针,再出栈,因为top指向的是最上面元素的上一个,里面是没有元素的,所以要先向下移动一下
    return 1;
}

//取栈顶元素
int GetTop(SqStack S, SElemType& e)
{
    if (S.base == S.top) return 0;//栈空
    e = *(S.top - 1);//不能写成S.top--,因为取栈顶元素指针不能动
    return 1;
}

//栈的显示
void Display(SqStack S)
{
    printf("栈底:");
    SElemType* p = S.base;//定义一个指针,指向栈中类型的元素,指针类型根据栈中的元素不同而不同
    while (p != S.top)//当指针不指向栈顶的时候,一直遍历
    {
        printf("%d ", *p);
        p++;
    }
    printf("\n");
}


int main()
{
    SqStack S;
    int e, n;//e为栈中的元素,n为栈的长度

    InitStack(S);//先建立一个空栈,之后再入栈

    //入栈测试
    printf("请输入栈的长度:");
    scanf("%d", &n);
    printf("请输入入栈的元素:\n");
    while (n != 0)
    {
        scanf("%d", &e);
        Push(S, e);//入栈
        n--;
    }
    printf("栈中的元素为:\n");
    Display(S);//显示栈中的元素

    //出栈测试
    Pop(S, e);
    printf("出栈后的元素为:\n");
    Display(S);

    //取栈顶元素测试
    GetTop(S, e);
    printf("取出的栈顶元素为:%d\n",e);
    printf("取出栈顶元素后栈为;\n");
    Display(S);
}

运行结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值