类C语言--栈与队列习题:回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

此代码可以正常运行,下附有运行界面,是是实实在在的类C语言
将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,……,直至栈空,结论为字符序列是回文。在出栈元素与串中字符比较不等时,结论字符序列不是回文。

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct
{
   
	int stack_size;
	ElemType *top;
	ElemType *base;
}Stack;
enum Status{
   ERROR,OK};

InitStack(Stack &S,ElemType *t)  //初始化栈
{
   
	int len=strlen(t);
	S.base = (ElemType *)malloc(len * 
  • 21
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
是否回文。 回答: 可以使用队列来实现判断一个字符是否回文。具体方法是,首先将字符串中的字符按顺序压中,再按顺序放队列中。然后,从中弹出一个字符,从队列中取出一个字符,比较它们是否相同,如果相同则继续比较下一个字符。如果一直比较到为空,队列也为空,那么就说明该字符串是回文。 下面是使用C语言实现判断回文的程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 50 typedef struct { char data[MAX_SIZE]; int top; } Stack; typedef struct { char data[MAX_SIZE]; int rear; int front; } Queue; void initStack(Stack *S) { S->top = -1; } void push(Stack *S, char elem) { if (S->top >= MAX_SIZE - 1) printf("Stack is full!\n"); else S->data[++(S->top)] = elem; } char pop(Stack *S) { if (S->top == -1) { printf("Stack is empty!\n"); return 0; } else return S->data[(S->top)--]; } void initQueue(Queue *Q) { Q->rear = Q->front = 0; } void enQueue(Queue *Q, char elem) { if ((Q->rear+1)%MAX_SIZE == Q->front) printf("Queue is full!\n"); else { Q->data[Q->rear] = elem; Q->rear = (Q->rear+1) % MAX_SIZE; } } char deQueue(Queue *Q) { char elem; if (Q->front == Q->rear) { printf("Queue is empty!\n"); return 0; } else { elem = Q->data[Q->front]; Q->front = (Q->front+1) % MAX_SIZE; return elem; } } int Palindrome(char *str) { int i, len; Stack S; Queue Q; initStack(&S); initQueue(&Q); len = strlen(str); for (i = 0; i < len; i++) { push(&S, str[i]); enQueue(&Q, str[i]); } while (S.top != -1) { if (pop(&S) != deQueue(&Q)) return 0; } return 1; } int main() { char str[MAX_SIZE]; printf("Please enter a string: "); scanf("%s", str); if (Palindrome(str)) printf("%s is a palindrome.\n", str); else printf("%s is not a palindrome.\n", str); return 0; } ``` 此程序中,我们定义了一个结构和一个队列结构。我们使用initStack和initQueue函数来初始化它们,用push和enQueue函数来压元素,用pop和deQueue函数来弹出元素。Palindrome函数用来判断给定字符是否回文,并返回真或假。主函数负责输字符串,并调用Palindrome函数来判断字符是否回文,最终输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值