回文判断,写一个C++程序同时用栈和队列判断回文(急!!)
出栈:倒序出队:顺序二者依次相等即可判断为回文。按如下算法写:intPalindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0{InitS...
出栈:倒序
出队:顺序
二者依次相等即可判断为回文。
按如下算法写:
int Palindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
InitStack(S);InitQueue(Q);
while((c=getchar()!='@')
{
Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构
}
while(!StackEmpty(S))
{
Pop(S,a);DeQueue(Q,b));
if(a!=b) return ERROR;
}
return OK;
}//Palindrome_Test 展开
出队:顺序
二者依次相等即可判断为回文。
按如下算法写:
int Palindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
InitStack(S);InitQueue(Q);
while((c=getchar()!='@')
{
Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构
}
while(!StackEmpty(S))
{
Pop(S,a);DeQueue(Q,b));
if(a!=b) return ERROR;
}
return OK;
}//Palindrome_Test 展开
3个回答
展开全部
#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;
}
}
}里面有具体操作没有用函数分开写,但都是按栈和队列写的
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;
}
}
}里面有具体操作没有用函数分开写,但都是按栈和队列写的
展开全部
#include <queue>
#include <stack>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
stack<char> S(stack<char>::container_type(str.begin(), str.end()));
queue<char> Q(queue<char>::container_type(str.begin(), str.end()));
while(!S.empty() && S.top() == Q.front())
{
S.pop();
Q.pop();
}
if(S.empty())
cout << "回文" << endl;
else
cout << "No回文"; << endl;
}
#include <stack>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
stack<char> S(stack<char>::container_type(str.begin(), str.end()));
queue<char> Q(queue<char>::container_type(str.begin(), str.end()));
while(!S.empty() && S.top() == Q.front())
{
S.pop();
Q.pop();
}
if(S.empty())
cout << "回文" << endl;
else
cout << "No回文"; << endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int main( )
{
queue<char> q;
stack<char> s;
char data[ 15 ];
int i;
bool flag = true;
cin >> data;
for ( i = 0; i < strlen( data ); i++ )
{
q.push( data[ i ] );
s.push( data[ i ] );
}
for ( i = 0; i < strlen( data ); i++ )
{
if ( q.front( ) != s.top( ) )
{
flag = false;
break;
}
q.pop( );
s.pop( );
}
if ( flag )
cout << "是回文数!";
else
cout << "不是回文数!";
return 0;
}
#include <queue>
#include <stack>
using namespace std;
int main( )
{
queue<char> q;
stack<char> s;
char data[ 15 ];
int i;
bool flag = true;
cin >> data;
for ( i = 0; i < strlen( data ); i++ )
{
q.push( data[ i ] );
s.push( data[ i ] );
}
for ( i = 0; i < strlen( data ); i++ )
{
if ( q.front( ) != s.top( ) )
{
flag = false;
break;
}
q.pop( );
s.pop( );
}
if ( flag )
cout << "是回文数!";
else
cout << "不是回文数!";
return 0;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询