帮忙编写一个算法

回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)。用C... 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)。
用C语言来编写
展开
 我来答
雪海银烽
2010-04-29
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
char a[100];
int i,j;
stack<char>aa;
scanf("%s",a);
getchar();
i=strlen(a)/2;
for(j=1;j<=i;j++)
aa.push(a[j-1]);
if(strlen(a)%2==0)
for(j=i+1;j<=strlen(a);j++)
{
if(aa.top()==a[j-1])
aa.pop();
else
break;
}
if(aa.size()==0)
printf("是回文数");
else
printf("不是会文数");
getchar();
return 0;
}

这是C语言写的,就是头文件用的是C++的,因为在C语言里面不能直接用栈,建议你学习一下C++的输入输出函数,以及用的头文件,很简单,大约五分钟就可以学会了!希望对你有帮助!呵呵
百度网友e3120544d
2018-01-06 · TA获得超过621个赞
知道小有建树答主
回答量:274
采纳率:100%
帮助的人:118万
展开全部
实现逆转的函数为void ReverseQueue(),其他的都是辅助测试所用。

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"

#define MAX 10

struct Queue
{
int front;
int rear;
int a[MAX];
}Que;

void Initial();
int InsertQueue(int n);
int DeleQueue();
void ReverseQueue();
void PrintQ();
//该函数是为了测试逆转函数的正确性
void TestFun();

int main()
{

Initial();
TestFun();
return 0;
}

void Initial()
{
Que.front=0;
Que.rear=0;
for (int i=0; i<MAX; i++)
{
Que.a[i] = 0;
}
}
int InsertQueue(int n)
{
if ( (Que.rear+1)%MAX == Que.front )
{
return 0;
}
Que.a[Que.rear] = n;
Que.rear = (Que.rear+1)%MAX;
return 1;
}

int DeleQueue()
{
if (Que.rear == Que.front)
{
return 0;
}
int temp;
temp = Que.a[Que.front];
Que.front++;
return temp;
}

void ReverseQueue()
{
int len;
len = (Que.rear-Que.front+MAX)%MAX;//total number in the queue
int start,end;
start = Que.front;
end = (Que.front+(len-1))%MAX;//the last number's index
int temp=0;
for (int i=0; i<len/2; i++)
{
temp = Que.a[end];
Que.a[end] = Que.a[start];
Que.a[start] = temp;
start = (start+1)%MAX;
end = (end-1+MAX)%MAX;
}
}

void PrintQ()
{
printf("\n");
int len = (Que.rear-Que.front+MAX)%MAX;
int k=Que.front;
for (int i=Que.front; i<Que.front+len; i++)
{
printf("%d ",Que.a[k]);
k = (k+1)%MAX;
}
}
//该函数是为了测试逆转函数的正确性
void TestFun()
{
int i=0;
for (i=0; i<MAX; i++)
{
if (InsertQueue(i) == 0)
{
printf("\nQueue is full!");
break;
}
}
PrintQ();
for (i=0; i<MAX/2; i++)
{
DeleQueue();
}
printf("\nAfeter delete %d number in the queue",MAX/2);
PrintQ();
ReverseQueue();
printf("\nReverse ==>");
PrintQ();
for (i=0; i<MAX/2; i++)
{
InsertQueue(i*8);
}
printf("\nAfter insert %d number in the queue",MAX/2);
PrintQ();
ReverseQueue();
printf("\nReverse ==>");
PrintQ();
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
petrifieddog
推荐于2018-03-13 · TA获得超过198个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:308万
展开全部
你都没说什么语言
bool IsHuiWen(char[] str)
{
int len=strlen(str);
int i=0;
int j=len-1;
while(i<j)
{
if(str[i]!=str[j])
break;
i++;
j--;
}

if(i<j) return FALSE;
else return TURE;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式