Ⅰ 用数据结构的栈和队列 写 回文判断
用栈实现了判断回文数的操作,即把字符串依次入栈,然后出栈并依次和字符数组比较是否相等,从而判断字符序列是否回文数,代码如下:
#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语言编译数据结构的回文问题。。在线等。急
教你个简单的方法,不管是回文的字符串还是数字都可以用。
拿字符串举例:abccba,从前往后读是abccba,那从后往前读也是abccba,所以,将字符串逆转,如果和原字符串一样,那就是回文的,如果不一样,就不是回文的。
比你用栈和队列简单多了,用栈和队列还容易出错。
逆转字符串应该没问题吧,有问题的话继续M我。
Ⅲ 用PASCAL语言求回文数问题
ls显然错。。比如1122,按照你的操作顺序的话就是1进1出2进2出,最终也能得到空栈,但1122显然不是回文。。
这个是我写的程序,因为不知道数据范围,所以用了string,如果数据太大的话建议改成ansistring。。
var a:char; s1,s2:string;
begin
a:=#0;
while a<>'#' do
begin
read(a);
if a='#' then break;
s1:=s1+a; s2:=a+s2;
end;
if s1=s2 then writeln('It is a palin word') else writeln('It is not a palin word');
end.
这个程序就是比较正序和倒序是否相同,如果相同则为回文,否则不为回文。。
没编译过,直接在上面拍的,不过相信不会错吧。。
Ⅳ 算法与数据结构实验:回文判断
#include<iostream>
using namespace std;
struct queue{
queue *front;
queue *rear;
queue *next;
char data;
};
#define maxsize 100;
#define T 10;
struct sqstack{
char *base;
char *top;
int stacksize;
};
sqstack inistack(sqstack &s){
s.base=new char [10];
if(!s.base) cout<<"error";
s.top=s.base;
s.stacksize=maxsize;
return s;
}
sqstack push(sqstack &s,char e){
if(s.top-s.base>=s.stacksize){
s.base=new char[10];
if(!s.base) cout<<"error";
s.top=s.base+s.stacksize;
s.stacksize+=T;
}
*s.top=e;
s.top++;
return s;
}
sqstack pop(sqstack &s, char e){
if(s.top==s.base)cout<<"error";
e=*s.top;
-- s.top;
return s;
}
queue iniqueue(queue &q){
q.front=q.rear=new queue;
if(!q.front) cout<<"error";
q.front->next=NULL;
return q;
}
queue inqueue(queue &q,char e){
queue *p;
p=new queue;
if(!p) cout<<"error";
p->data=e;
q.rear->next=p;
q.rear=p;
q.rear->next=NULL;
return q;
}
queue dlqueue(queue &q,char e){
queue* p;
p=new queue[10];
if(q.front==q.rear)cout<<"error";
else{
p=q.front->next;
e=p->data;
q.front->next=p->next;
if(q.rear==p)q.rear=q.front;
delete p;
}
return q;
}
char gethead(queue &q){
char e;
if(q.rear==q.front) cout<<"error";
else e=(q.front->next)->data;
return e;
}
char gettop(sqstack &s){
char e;
if(s.top==s.base){
cout<<"error";
}
e=*(s.top-1);
return e;
}
int main(){
int i;
sqstack s;
queue h;
char ch[5] ,x,y;
inistack(s);
iniqueue(h);
for(i=1;i<=5;i++){
cin>>ch[i];
push(s,ch[i]);
inqueue(h,ch[i]);
}
for(int j=1;j<=5;j++){
x=gettop(s);
y=gethead(h);
if(x!=y) cout<<"\tfalse\t"<<endl;
else cout<<"\tequal\t"<<endl;
pop(s,x);
dlqueue(h,y);
}
system("pause");
return 0;
}
Ⅳ 用栈和队列判断回文数(数据结构题)
#include<iostream> #include<stack> using namespace std; int main() { stack<char>S; int top,i; char q[100]; while(cin>>q) { top=-1; for(i=0;q[i]!='&';i++) { if(q[i]=='@') { cout<<"No"<<endl; break; } else { S.push(q[i]); ++top; } } if(q[i]!='@') { i++; while(q[i]!='@') { if(q[i]==S.top()&&q[i]!='&') { top--; S.pop(); i++; } else { cout<<"No"<<endl; break; } } if(top==-1&&q[i]=='@') cout<<"Yes"<<endl; } } return 0; }
Ⅵ C语言编回文数
#include <stdio.h>
#include <stdlib.h>
int huiwen(char *str) /* 回文子函数 */
{
int len=strlen(str);
int i=0;
for(i=0; i<len/2; i++) {
if(*(str+i) != *(str+len-1-i)) return 1;
}
return 0;
}
int main()
{
int i=0;
char str[5];
int hw6[10000] = {0};
int cnt=0;
int max=0;
printf("所有回文数:\n");
for(i=9999; i>=100; i--) {
memset(str, 0, 5);
sprintf(str, "%d", i);
if(huiwen(str) == 0) {
printf("%d\n", i); /* 这里把所有回文数打印出来 */
if(i % 6 == 0) {
hw6[cnt++] = i; /* 记录下被6整除的回文数 */
if(max == 0)
max = i; /* 最大被6整除的回文数,只会被执行一次 */
}
}
}
printf("能被6整除的回文数:\n");
for(i=0; i<cnt; i++) {
printf("%d\n", hw6[i]);
}
printf("最大回文数: %d\n",max);
}
Ⅶ C语言 关于判断回文数的程序
1、首先打开vc6.0,新建一个控制台项目,添加头文件。
Ⅷ 数据结构C语言版新手,请教啊~!
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef struct ls{
char d;
struct ls *next;
} LS;
LS *push_back(LS *a,char c)
{
LS *t;
if (a==NULL) {
a=malloc(sizeof(LS));
a->d=c;
a->next =NULL;
//return a;
}
else
a->next=push_back(a->next ,c);
return a;
}
LS *fz(LS *a)
{
LS *m,*l=NULL;
while (a!=NULL)
{
m=a;
a=a->next ;
m->next=l;
l=m;
}
return m;
}
int main(void)
{
LS *a=NULL,*b=NULL;
int i;
char c;
for (c=getchar(); c!='\n'; c=getchar()) {
if (c!=' ') {
a=push_back(a,c);
b=push_back(b,c);
}
}
b=fz(b);
while (a!=NULL)
{
LS *t;
if (a->d!=b->d) {
break;
}
t=a;
a=a->next;
free(t);
t=b;
b=b->next ;
free(t);
}
if (a!=NULL) {
printf("非回文");
}
else printf("回文");
return 0;
}
//---------------------------------------------------------------------------