AB5 点击消除

该代码定义了一个结构体SNode来表示栈,包含栈顶元素下标和容量,以及一个字符数组。Push函数用于将字符入栈,如果栈中已存在该字符,则移除。主函数中,读取字符串并利用Push函数处理,最后输出栈中元素,实现了字符串去重功能。
摘要由CSDN通过智能技术生成

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 300001

typedef struct SNode{
    int top;                 //栈顶元素下标
    int capacity;            //元素个数
    char str[M];
}SNode;

typedef SNode*Stack;

void Push(Stack s,char a)
{
    if(s->capacity==0)
    {
    	s->top++;
        s->capacity++;
    	s->str[s->top]=a;
       
    }
    else {
    if(s->str[s->top]==a)             //消除步骤
    {
    	s->top--;
    	s->capacity--;
    	
    }
    
    else {
    	s->top++;
        s->capacity++;
    	s->str[s->top]=a;
        
    }
    }
}


int main()
{
	
    char first_str[M];
    
    Stack s=(Stack)malloc(sizeof(struct SNode));
    s->capacity=0;
    s->top=-1;
    
    scanf("%s",first_str);
    int len=strlen(first_str);

    for(int i=0;i<len;i++)
    {
        Push(s,first_str[i]);
    }
    if(s->capacity==0)
    printf("0\n");
    else
     {
     	for(int i=0;i<s->capacity;i++)
     	{
     		printf("%c",s->str[i]);
		 }
	 }
    
}

写得不太规范,欢迎指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值