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

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

#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

}

}

}里面有具体 *** 镇闷作没有用函数分开写,但都是按栈答碧和队列写御举弯的

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

#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

}

运行结果:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12219711.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存