C语言数据结构和ACM2023-第四章-循环队列判断回文- LJD 【问题描述】 回文判断:假设称正读和反读都相同的字符序列为“回文”,例如‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是。试写一个算法判别读入的一个以‘@’结束符的字符序列是否是“回文”。 提示:利用栈和队列知识。 Copying judgment: Assuming that the character sequence known as the same reading and anti-reading is "replying", such as 'abba' and 'abcba' are repayment, 'Abcde' and 'Ababab' are not. Try to write a character sequence of an algorithm to read in the '@' ending character. Tip: Use stacks and queue knowledge. 【输入形式】 以@结尾的字符串 【输出形式】 判断结果 【样例输入】 abcdcba@ 【样例输出】 此字符串为回文

时间: 2023-06-27 09:03:08 浏览: 80
以下是C语言的实现,使用循环队列和栈结构判断回文: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 typedef struct { char data[MAX_SIZE]; int front, rear; } Queue; typedef struct { char data[MAX_SIZE]; int top; } Stack; void initQueue(Queue *q) { q->front = q->rear = 0; } void initStack(Stack *s) { s->top = -1; } int isEmptyQueue(Queue *q) { return q->front == q->rear; } int isFullQueue(Queue *q) { return q->front == (q->rear + 1) % MAX_SIZE; } int isEmptyStack(Stack *s) { return s->top == -1; } int isFullStack(Stack *s) { return s->top == MAX_SIZE - 1; } void enqueue(Queue *q, char c) { if (isFullQueue(q)) { printf("Queue is full\n"); exit(1); } q->data[q->rear] = c; q->rear = (q->rear + 1) % MAX_SIZE; } char dequeue(Queue *q) { if (isEmptyQueue(q)) { printf("Queue is empty\n"); exit(1); } char c = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return c; } void push(Stack *s, char c) { if (isFullStack(s)) { printf("Stack is full\n"); exit(1); } s->data[++s->top] = c; } char pop(Stack *s) { if (isEmptyStack(s)) { printf("Stack is empty\n"); exit(1); } return s->data[s->top--]; } int main() { char str[MAX_SIZE]; printf("Input a string ending with '@': "); scanf("%s", str); int length = strlen(str); if (str[length - 1] != '@') { printf("Invalid input\n"); return 0; } Queue q; Stack s; initQueue(&q); initStack(&s); int i; for (i = 0; i < length - 1; i++) { enqueue(&q, str[i]); push(&s, str[i]); } while (!isEmptyQueue(&q) && !isEmptyStack(&s)) { if (dequeue(&q) != pop(&s)) { printf("This string is not a palindrome\n"); return 0; } } printf("This string is a palindrome\n"); return 0; } ``` 以上程序可以根据输入的字符串进行回文判断,如果是回文则输出"This string is a palindrome",否则输出"This string is not a palindrome"。

相关推荐

最新推荐

recommend-type

ACM-ICPC 2020年上海区域赛正式赛试题

国际大学生程序设计竞赛(英文全称:International Collegiate Programming Contest(简称ICPC))是由国际计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力...
recommend-type

ACM------搜索 (从入门到精通)

ACM------搜索 (从入门到精通) ACMER 必备,经典讲义!!!!个人看过的最好的搜索PPT
recommend-type

acm-ICPC 搜索算法DFS和BFS文件格式(ppt)经典算法“剪枝”等算法

acm-ICPC 搜索算法DFS和BFS文件格式(ppt)经典算法“剪枝”等算法,深度优先搜索和广度优先搜索。
recommend-type

ACM---JAVA部分

09年参加现场赛前准备的JAVA模板,由于水平有限,有些用C/C++做不出来只能靠JAVA水过
recommend-type

ACM-排序(非常有用)

哈哈,借用了一下我们现在训练的ACM的题,对逍遥参加ACM的同学很有用喔
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。