【C语言编码练习】04:数据结构栈的C实现

该代码示例展示了如何用C++实现一个简单的栈结构,包括push、pop和top操作。栈用于存储整数,提供了在栈顶添加元素、删除栈顶元素以及查看栈顶元素但不删除的功能。当栈为空时,pop和top操作会返回错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


问题描述:

请你实现一个栈。
操作:
push x:将 加x入栈,保证 x为 int 型整数。
pop:输出栈顶,并让栈顶出栈
top:输出栈顶,栈顶不出栈


输入描述:

第一行为一个正整数 n ,代表操作次数。(1≤n≤100000)
接下来的 n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。


输出描述:

如果操作为push,则不输出任何东西。
如果为另外两种,若栈为空,则输出 "error“
否则按对应操作输出。


举例:

//输入:
6
push 1
pop
top
push 2
push 3
pop
//输出:
1
error
3

代码结果:

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

typedef struct Stack
{
    int a[100000];
    int topp;
}*LStack;

void push(LStack s,int x)//将x加入栈,保证x为int型整数
{
    s->a[s->topp]=x;
    s->topp++;
}

int pop(LStack s)//输出栈顶,并让栈顶出栈
{
    if(s->topp==0) 
        return -1;
    else return s->a[--s->topp];
}

int top(LStack s)//输出栈顶,栈顶不出栈
{
    if(s->topp==0)  
        return -1;
    else return s->a[s->topp-1];
}

void main()
{
    LStack s=(LStack)malloc(sizeof(struct Stack));//利用结构体在堆内存空间里创建一个数据结构栈
    s->topp=0;
    int n=0;
    scanf("%d",&n);
    while(n--)
    {
        char *str;//
        scanf("%s",str);
        //int strcmp(const char *s1,const char *s2);比较两个字符串并根据比较结果返回整数
        //自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’\0’为止。
        // 如果返回值 < 0,则表示 s1 小于 s2
        // 如果返回值 > 0,则表示 s1 大于 s2
        // 如果返回值 = 0,则表示 s1 等于 s2
        if(!strcmp(str,"push"))
        {
            int num=0;
            scanf("%d",&num);
            push(s,num);
            continue;//continue作用为结束本次循环
            //break可以跳出“循环体”,还可以跳出switch
        }
        if(!strcmp(str,"pop"))
        {
            int num1=pop(s);
            if(num1==-1)
                printf("error\n");
            else printf("%d\n",num1);
            continue;
        }
        if(!strcmp(str,"top"))
        {
            int num2=top(s);
            if(num2==-1)
                printf("error\n");
            else printf("%d\n",num2);
            continue;
        }
    }
    system("pause");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不僈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值