题解 | 【模板】栈的操作
【模板】栈的操作
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;
}
查看6道真题和解析
