判断字符串是否为回文(C语言 顺序栈)

Posted 凌桓丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断字符串是否为回文(C语言 顺序栈)相关的知识,希望对你有一定的参考价值。

首先我们需要确定思路,如何用栈来判断字符串是否为回文。
1.栈是先进后出
2.回文是指正读反读均相同的字符序列
从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对比,如果完全相同则为回文,这是一个简单并且直接的方法,但是还有没有方法可以优化呢?
我们可以可以通过回文的性质联想到先将一般的字符串存进去,出栈后再与剩下的一般进行比较,完全相同则为回文,这样的算法比起刚才的效率高了一倍。
明确了思路就可以开始写算法了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define StackSize 100 //假定预分配的栈空间最多为100个元素
typedef char DataType;//假定栈元素的数据类型为字符

typedef struct

	DataType data[StackSize];
	int top;
SeqStack;

void Init(SeqStack *&s)

    s=(SeqStack *)malloc(sizeof(SeqStack));
    s->top=-1;

//初始化栈
void push(SeqStack *s,DataType e)

	if( s->top == StackSize )
	
		printf("栈满\\n");
	
	else
	
		s->top++;
        s->data[s->top]=e;
	

//入栈 
DataType pop(SeqStack *s)

	if( s->top == -1 )
	
		printf("栈空\\n");
		return  '\\0';
		
	return (s->data[s->top--]);

//出栈 
int main()

	SeqStack *s;
	int i=0,length,mid,flag=1;
	char str[StackSize],y,z;
	printf("请输入需要判断回文的字符串:\\n");
	gets(str);
	length = strlen(str);
	mid = length/2-1;
//mid为字符串中间字符的下标
	Init(s);
	
	for( i=0; i<length/2; i++)
	
		push(s,str[i]);
	
//入栈	
	if( length%2 != 0 )
		mid += 1;
//判断字符串长度是奇数还是偶数,当为奇数时从中间下一个开始比较 
	for( i=1; i<=length/2; i++)
	
		if( str[mid+i] == pop(s) )
		
			flag = 1;
		
		else
		
			flag = 0;
			break;
		
	 
	if( flag == 1 )
		printf("该字符串为回文\\n"); 
	else
		printf("该字符串不是回文");

	return 0;

因为我们先存进去一半的字符串,但如果字符串长度为奇数,既有一个字符仅仅出现过一次时,我们可以跳过它,与出栈数据与它后边的字符进行比较,当完全相同时,即为回文

以上是关于判断字符串是否为回文(C语言 顺序栈)的主要内容,如果未能解决你的问题,请参考以下文章

C语言 判断回文字符串

用递归判断字符串是不是为回文串(C语言) 用递归判断字符串是不是为回文串(C语言)

C语言:编写一个测试一个串是不是为回文的递归函数,是回文,返回1;不是,返回0。

用递归的方法实现判断回文字符c语言

用c语言实现字符串的回文,有要求如下:

C语言怎么判断一个数是不是是回文数?