题解 | 【模板】栈的操作

【模板】栈的操作

https://www.nowcoder.com/practice/cdf02ea916454957b575585634e5773a

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

#define MAX_N 100005

//定义栈的结构体(封装栈的核心元素:存储元素的数组 + 栈顶指针)
typedef struct 
{
    int data[MAX_N];
    int top;//栈顶指针:-1表示空栈,数值表示栈顶元素在数组中的下标(从0开始)
} Stack;

//栈初始化函数:将栈设为空栈
void initStack(Stack *s)//栈的指针,需修改栈的内容,必须传地址
{
    s->top = -1;//空栈标识:栈顶指针设为 -1(此时数组无有效元素)
}

//将元素 x 压入栈顶
void push(Stack *s,int x)
{
    s->data[++(s->top)] = x;//等价于 s->top += 1;s->data[s->top] = x;   栈顶指针先 +1(移动到新的栈顶位置),再存入元素 x  ++(s->top) 是先自增再取值,这样可以确保元素存在栈顶
}

//弹出栈顶元素(仅移动栈顶指针,无需清空元素,因为后续压入会覆盖)
void pop(Stack *s)
{
    if(s->top == -1)
    {
        printf("Empty\n");
    }
    else
    {
        (s->top)--;
    }
}

//查询并输出栈顶元素
void query(Stack *s)
{
    if(s->top == -1)
    {
        printf("Empty\n");
    }
    else
    {
        printf("%d\n",s->data[s->top]);
    }
}

//查询并输出栈中元素个数
void size(Stack *s)
{
    printf("%d\n",s->top + 1);//+ 1 操作是因为初始空栈的s->top = -1
}


int main() {

    int n;
    scanf("%d",&n);

    Stack s;
    initStack(&s);

    char op[10];
    int x;

    for(int i = 0;i < n;i++)
    {
        scanf("%s",op);

        if(strcmp(op,"push") == 0)
        {
            scanf("%d",&x);
            push(&s,x);
        }

        else if(strcmp(op,"pop") == 0)
        {
            pop(&s);
        }

        else if(strcmp(op,"query") == 0)
        {
            query(&s);
        }

        else if(strcmp(op,"size") == 0)
        {
            size(&s);
        }
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务