
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 "stdio.h"
#include "stdlib.h"
#include "string.h"
#define EMPTY 0
#define FULL 10000
#define MAX 10000
typedef char data
typedef struct elem {
data d
struct elem *next
}elem
typedef struct stack {
int cnt
elem *top
}stack
void initialize(stack *stk)
void push(data d, stack *stk)
data pop(stack *stk)
bool empty(const stack *stk)
bool full(const stack *stk) //栈 *** 作函数
void initialize(stack *stk)
{
stk->cnt = 0
stk->top = NULL
}
bool empty(const stack *stk)
{
return stk->cnt == EMPTY
}
bool full(const stack *stk)
{
return stk->cnt == FULL
}
void push(data d, stack *stk)
{
elem *p
if (!full(stk))
{
p = (elem *)malloc(sizeof(elem))
p->渗碰基d = d
p->next = stk->top
stk->top = p
stk->cnt++
}
}
data pop(stack *stk)
{
data d
elem *p
if(!empty(stk))
{
d = stk->top->d
p = stk->top
stk->top = stk->top->next
stk->cnt--
free(p)
}
return d
}
int main(void)
{
data input[MAX]
stack temp
int i = 0
int flag = 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("此字符序列不是回文数!\n")
break
}
}
if (empty(&temp))
printf("此字符序列是回文数!\n")
return 1
}
运行结果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)