数据结构:回文判断

回文:

        指正读反读均相同的字符序列,如“abba”、“abdba”、12321均是回文

解题思路:

        基于栈的先进后出,后进先出的特点,可以用一个字符指针保存原来的字符串,再让待测字符串进栈,再出栈,将指针与字符串比较

代码实现:(C)

        

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100 
typedef struct Node {
	char *base;//指向栈底 
	char *top;//指向栈顶 
	int size; 
	//size = 99;
}*stack;

stack init(){//栈的初始化 
	//int n;
	stack s = (stack)malloc(sizeof(stack));
	s->base = (char*)malloc(sizeof(char)*MAXSIZE);
	if(!s->base)
	return NULL;
	//scanf("%d",&n);
	s->size = MAXSIZE;
	printf("初始化成功\n"); 
	s->top = s->base;
	s->size = MAXSIZE;
	return s;
}

int full_stack(stack s){//判断是否栈空 
	if(s->top - s->base == MAXSIZE)
		return 1;
	else
	return 0;
}

int empty_stack(stack s){
	if(s->top == s->base)
	return 1;
	else
	return 0; 
}

void push_stack(stack s,char n){//压栈
	
	if(full_stack(s) == 1){
		printf("已经栈满,无法添加!\n");
		return;
	}
	else {
	*(s->top++) = n;
	//printf("入栈成功\n");
	}	
}

void pop_stack(stack s,char &e){//c++中,传入参数为&+变量名,会使传入参数的值永久改变 
	if(empty_stack(s) == 1){
		printf("已经栈空!\n");
		return ;
	}
	else{
		e = *(--s->top);
	}
}

void getTop(stack s,char*e){
	if(empty_stack(s) == 1){
		printf("已经栈空!\n");
		return ;
	}
	*e = *s->top;
}




//具体思路:让待判断的数依次入栈再出栈,判断前后是否一致 
int main(){
	char fir[MAXSIZE];
	char *p1,*p;
	
	printf("请输入数据\n");
	//scanf("%s",p1);
	gets(fir);
	int len = strlen(fir);
	p1 = (char*)malloc(sizeof(char)*len);
	strcpy(p1,fir);
	
	len = strlen(p1);	
	
	stack s = init();
	//printf("pause\n");
	
	int i;
	
	for(i=0;i<len;i++)
	{
		
		push_stack(s,fir[i]);
		p = s->top;
		printf("%c\n",*--p);
	}
	
	char temp;
	for(i=0;i<len;i++){
		pop_stack(s,temp);
		fir[i] = temp;
		printf("%c\n",fir[i]);
	}
	int bol = strcmp(p1,fir);
	if(bol == 0)
	printf("是回文\n");
	else
	printf("不是回文\n");
}

  • 1
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值