当前位置:首页 » 编程语言 » c语言利用队列判断回文
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言利用队列判断回文

发布时间: 2023-01-23 20:43:14

Ⅰ 用c语言判断一个数是否是回文数(不用循环语句)


#include<stdio.h>
#include<string.h>
intfun(char*s,inti,intlen)
{
if(len/2==i)return1;
if(*(s+i)==*(s+len-i-1)){
returnfun(s,i+1,len);
}
return0;
}

intmain(){

chars[255];
scanf("%s",s);
intlen=strlen(s);
if(len<=1){
printf("输入字符串过短!");
}
elseif(fun(s,0,len))
{
printf("是回文");
}
else
{
printf("不是回文");
}

scanf("%s",s);
return0;
}

我用递归实现了

Ⅱ 用数据结构的栈和队列 写 回文判断

用栈实现了判断回文数的操作,即把字符串依次入栈,然后出栈并依次和字符数组比较是否相等,从而判断字符序列是否回文数,代码如下:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#defineEMPTY0

#defineFULL10000

#defineMAX10000

typedefchardata;

typedefstructelem{

datad;

structelem*next;

}elem;

typedefstructstack{

intcnt;

elem*top;

}stack;

voidinitialize(stack*stk);

voidpush(datad,stack*stk);

datapop(stack*stk);

boolempty(conststack*stk);

boolfull(conststack*stk);//栈操作函数

voidinitialize(stack*stk)

{

stk->cnt=0;

stk->top=NULL;

}

boolempty(conststack*stk)

{

returnstk->cnt==EMPTY;

}

boolfull(conststack*stk)

{

returnstk->cnt==FULL;

}

voidpush(datad,stack*stk)

{

elem*p;

if(!full(stk))

{

p=(elem*)malloc(sizeof(elem));

p->d=d;

p->next=stk->top;

stk->top=p;

stk->cnt++;

}

}

datapop(stack*stk)

{

datad;

elem*p;

if(!empty(stk))

{

d=stk->top->d;

p=stk->top;

stk->top=stk->top->next;

stk->cnt--;

free(p);

}

returnd;

}

intmain(void)

{

datainput[MAX];

stacktemp;

inti=0;

intflag=0;

initialize(&temp);//初始化临时栈

scanf("%s",&input);//输入字符串

while(input[i]!='@')

{//字符串入栈

push(input[i],&temp);

i++;

}

while(!empty(&temp))

{//字符依次出栈和字符数组比较,判断是否回文数

if(temp.top->d==input[flag])

{

pop(&temp);

flag++;

}

else

{

printf("此字符序列不是回文数! ");

break;

}

}

if(empty(&temp))

printf("此字符序列是回文数! ");

return1;

}

运行结果:

Ⅲ C语言怎么判断一个数是否是回文数

所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如12321。

以下是判断一个数是否为回文数的代码:

Ⅳ c语言判断是否为回文

首先清楚什么是回文。。。我们称正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”、12321、123321是“回文”。
然后再看程序,把长度为n的字符串的每一个字符排下标,即从0到n-1,要判断是否回文,就是把一串字母进行前后比对,即下标0的字符和下标为n-1的字符,1与n-2,2与n-3。。。
for
(i
=
0;
i
<
len
/
2;
i++)
{
if
(str[i]
!=
str[len-1-i])
{
break;
{{{{这里是什么意思啊}}}}}}
//
这里是判断不符号回文的情况,只要两个字符不符合,那这整个字符串就不是,所以break跳出循环判断
}
}
if
(i
==
len
/
2)
{{{{我不懂这里是什么意思}}}}}}
//
长度为n的字符串最多只能比对len
/
2次,那么如果每对都符合,那就是回文啦
{
printf(“%s
shi
hui
wen.\n“,
str);
}

Ⅳ 如何用C语言中的队列(链表实现)设计一个算法来判断一个字符串是否为回文

#include "stdio.h"
#include "stdlib.h"
typedef struct DNode
{
struct DNode *piror,*next;
char data;
}DNode,*Doublelist;
main()
{
Doublelist l,p,q,s;
char elem;
l=(Doublelist)malloc(sizeof(DNode));
l->piror=l->next=NULL; q=l;p=l;
printf("Input the element: "); /*一个一个录入*/
scanf("%c",&elem);
getchar();
while(elem!='@') /*元素录入,中间以&分开,以@结束*/
{
s=(Doublelist)malloc(sizeof(DNode));
s->data=elem;
q->next=s;
s->piror=q;
q=s;
s->next=NULL;
printf("Input the element: ");
scanf("%c",&elem);
getchar(); if(q->data=='&')p=q;

}
l->next->piror=NULL;
free(l);
q=p;
while(p->piror->data==q->next->data&&p->piror!=NULL&&q->next!=NULL)
{
p=p->piror; q=q->next;
}
if(p->piror==NULL&&q->next==NULL)
printf("Is palindrome!");
else
printf("Not palindrome!");
getch();
}

元素录入,以“&”为中间符号,以“@“为结束判断。

Ⅵ C语言编写程序判断回文数

要判断一个数n是否回文数,可以利用一个简单的循环就可以解决问题的。先保存好n的一个副本n1,初始化一个变量n2=0,然后每次取n1的末位数后添加到n2的末位,并把原n1的末位去掉。如此循环,当n1为0时循环结束,此时再判断,若n2==n,则n就是一个“回文数”了。
#include<stdio.h>
int main()
{ int n,n1,n2;
scanf("%d",&n);
n1=n;
for(n2=0;n1;n1/=10)
n2=n2*10+n1%10;
printf("%s\n",n2==n?"Yes":"No");
return 0;
}

Ⅶ 回文判断,写一个C++程序同时用栈和队列判断回文(急!!)

#include <iostream>
using namespace std;

//定义栈
typedef struct stack {
char bata;
struct stack *next;
}Stack;
//定义队列
typedef struct QNode {
char data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;

int main()
{
Stack *top = new Stack;
if(!top) exit(1);
top = NULL;//初始化栈

LinkQueue *x = new LinkQueue;
if(!x) exit(1);
x->front = x->rear=NULL;//初始化队列

cout<<"请输入要检测的字符串,可以包含空格,以@结束"<<endl;
char sr[100];
sr[0] = ' ';
int i=-1;
do{
i++;
cin>>sr[i];
stack *s1 = new stack;
if(!s1) exit(1);
if(i==0)
{
s1->next = NULL; //输入栈第一个数据
s1->bata=sr[i];
top = s1;
}
s1->bata = sr[i];
s1->next = top;
top = s1;

QNode *x1 = new QNode;
if(!x1) exit(1);
if(i==0) //输入队列第一个数据
{
x1->data = sr[i];
x->front = x1;
x->rear = x1;
x->front->next = NULL;
}
x1->data = sr[i];
x->rear->next = x1;
x->rear = x1;

} while(sr[i]!='@');
cout<<"检测结果"<<endl;
if(top==NULL&&x->front==NULL)
cout<<"未输入!!!"<<endl;
top = top->next; //将'@'字符删除
while(top!=NULL&&x->front!=NULL)
{
if(top->bata!=x->front->data)
{
cout<<"此字符串不是回文!"<<endl;
return 0;
}
else
{
cout<<"此字符串是回文。"<<endl;
return 0;
}

}
}里面有具体操作没有用函数分开写,但都是按栈和队列写的

Ⅷ 用c语言如何实现判断回文

下面介绍了几种判断回文的方法:

  1. 你提问的第一个地方,比如你输入了个5个字符的字符串 ,abcba 先判断第一个和最后一个是否相同 ,再判断第二个和倒数第二个 。

  2. 如果相等程序正常执行 ,如果不相等 ,break就跳出循环 ,你提问的第二个地方就是i 如果等于 len/2说明 上边循环式正常退出 。

    那就是说前后一一对比都相同 ,是回文数 ,不等于len/2说明是由break退出导致,既前边和后边某一位不相同

  3. 若输入 abbci=0str[0]='a' str[4-1-0]='c' 执行break;跳出for循环循环结束 i=0 所以判断不是回文若输入ab=0str[0]='a' str[4-1-0]='a' i=1str[1]='b' str[4-1-1]='b'i=2for循环条件不满足i

Ⅸ 用C#描述数据结构的栈和队列的方法判断是否为回文。

//-----------以下是判断方法,堆栈和队列的创建方法很普通,如果你还要的话再补充------------
//采用堆栈判断回文
//思路就是:利用栈的后进先出的方法,将目标字符串先压入一个栈
//如果该字符串是回文,则他的出栈序列就与原序列相同
//采用队列判断回文
//与堆栈正好相反,利用先进先出
bool Check(char[] target)
{
//创建一个栈或队列的实例
StackOrQueue temp = new StackOrQueue();

//将目标字符串压入栈或队列
for(int i = 0; i < target.Length; i++)
temp.push(target[i]);

//利用栈或队列的性质,判断是否为回文
for(int i = 0; i < target.Length; i++)
//for(int i = target.Length - 1; i > 0; i--) 如果是队列法只需要将上句改为这句
if(temp.pop() != target[i])
return false;

return true
}

Ⅹ C语言 数据结构 , 用链式队列和链式栈 判断一个字符串是否为回文

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

constMaxStackSize=50;

typedefcharElemType;

typedefstructsnode{
ElemTypedata;
structsnode*next;
}*LinkStack,*psNode;

LinkStackGetEmptyStack(){//初始化
LinkStackhead=(psNode)malloc(sizeof(structsnode));
if((head)==NULL){
printf("内存空间不足无法插入! ");
returnNULL;
}
head->data='0';
head->next=NULL;
returnhead;
}

intStackNotEmpty(LinkStackhead){//是否为空
return(head->next!=NULL);
}

intStackPush(LinkStackhead,ElemTypex){//入栈
psNodep=(psNode)malloc(sizeof(structsnode));
if(p==NULL){
printf("内存空间不足无法插入! ");
return0;
}
p->data=x;
p->next=head->next;
head->next=p;
return1;
}

intStackPop(LinkStackhead,ElemType*x){//删除元素(弹出)
psNodep=head->next;
if(StackNotEmpty(head)){
*x=p->data;
head->next=p->next;
free(p);
return1;
}
return0;
}

typedefstructqnode{//队列
ElemTypedata;
structqnode*next;
}*pqNode;

typedefstructqueue{
pqNodefront;
pqNoderear;
}*LinkQueue;

LinkQueueGetEmptyQueue(){//初始化
LinkQueueQ=(structqueue*)malloc(sizeof(structqueue));
if(Q==NULL){
printf("内存空间不足无法插入! ");
returnNULL;
}
Q->rear=NULL;
Q->front=NULL;
returnQ;
}

intQueueNotEmpty(LinkQueueQ){//是否为空
return(Q->front!=NULL);
}

intQueueAppend(LinkQueueQ,ElemTypex){//入队列
structqnode*p=(structqnode*)malloc(sizeof(structqnode));
if(p==NULL){
printf("内存空间不足! ");
return0;
}
p->data=x;
p->next=NULL;
if(Q->front==NULL)//队列为空
Q->front=Q->rear=p;
else{
Q->rear->next=p;
Q->rear=p;
}
return1;
}

intQueueDelete(LinkQueueQ,ElemType*d){//出队列(删除)
pqNodep;
if(QueueNotEmpty(Q)){
*d=Q->front->data;
p=Q->front;
Q->front=p->next;
if(p->next==NULL)Q->rear=NULL;
free(p);
return1;
}
printf("队列已空无数据出队列! ");
return0;
}

typedefstructsqstack{//顺序栈(进制)
ElemTypestack[MaxStackSize];
intsize;
}SequenceStack;

voidStackInitiate(SequenceStack*S){
S->size=0;
}

intStackNotEmpty(SequenceStack*S){
return(S->size>0);
}

intStackPush(SequenceStack*S,ElemTypex){
if(S->size>=MaxStackSize){
printf("堆栈已满无法插入! ");
return0;
}
S->stack[S->size]=x;
++S->size;
return1;
}

intStackPop(SequenceStack*S,ElemType*d){
if(S->size==0){
printf("堆栈已空! ");
return0;
}
--S->size;
*d=S->stack[S->size];
return1;
}

intmain(){//主函数在这里
LinkStackhead=GetEmptyStack();
LinkQueueQ=GetEmptyQueue();
// SequenceStackmyStack;
charx,d;
inti=0,flag;
charstr[MaxStackSize];

printf("输入字符串:");
scanf("%s",str);
while(str[i]){
StackPush(head,str[i]);
QueueAppend(Q,str[i]);
++i;
}
while(StackPop(head,&x)&&QueueDelete(Q,&d)&&flag)
flag=(x==d);
if(flag)printf("是回文! ");
elseprintf("不是回文! ");
return0;
}