博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之队列——回文字判断
阅读量:6855 次
发布时间:2019-06-26

本文共 2406 字,大约阅读时间需要 8 分钟。

题目:判别回文字符串

正读和反读都一样的字符串称为回文字符串。

编写程序,在键盘上输入一个字符串,以“#”作为结束标志,判别它是否为回文字符串。要求:采用栈和队列来实现

#include 
#include
#define ERROR 0#define OK 1typedef struct node{ char data; struct node *next;}queue,stack,*LinkQueue,*LinkStack;int push(LinkStack &sHead, char ch){//入栈操作 LinkStack p = (LinkStack)calloc(1, sizeof(stack)); if (p == NULL){ printf("Error calloc.\n"); return ERROR; } p->data = ch; p->next = sHead; sHead = p; return OK;}char pop(LinkStack &sHead){//出栈 if (NULL == sHead) return ERROR; LinkStack temp = sHead; char ch = sHead->data; sHead = sHead->next; free(temp); return ch;}int enqueue(LinkQueue &qHead, LinkQueue &qRear, char ch){//进入队列操作 LinkQueue p = (LinkQueue)calloc(1, sizeof(queue));//动态分配空间并初始化 if (p == NULL){ printf("Error calloc_queue.\n"); return ERROR; } p->data = ch; p->next = NULL; if (NULL != qRear) qRear->next = p; if (NULL == qHead) qHead = qRear; qRear = p; return OK;}int queueDel(LinkQueue &qHead){//进行队列删除 if (qHead == NULL) return OK; LinkQueue temp = qHead; qHead = qHead->next; free(temp); return OK;}char dequeue(LinkQueue &qHead){//进行出队列操作 char ch = qHead->data; LinkQueue temp = qHead; qHead = qHead->next; queueDel(temp); return ch;}void input(LinkStack &sHead, LinkQueue &qHead,LinkQueue &qRear,int &len){ char ch; printf("Please input the string which would be judged:"); while (scanf("%c", &ch) && '#' != ch){ push(sHead, ch);//推入栈 enqueue(qHead ,qRear, ch);//进入队列 len++; }}int compare(LinkStack &sHead, LinkQueue &qHead,int len){ int cnt = 0; while (sHead != NULL && qHead != NULL && cnt <= len/2){//判断一半的栈和队列是否已空 if (pop(sHead) != dequeue(qHead))//比较对应字符是否相同 return ERROR;//不同直接退出比较 cnt++; } return OK;//始终相同,匹配}void output(LinkStack &sHead, LinkQueue &qHead,int len){ if (compare(sHead, qHead,len))//调用判断函数进行判断是否满足 printf("It is a plalindrome.\n"); else printf("It isn't a plalindrome.\n");}int main(){ //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int len=0; LinkStack sHead = NULL;//栈的头结点指针 LinkQueue qHead = NULL ,qRear = NULL;//队列的头结点和尾节点指针 input(sHead, qHead,qRear,len); output(sHead, qHead,len); return 0;}

转载于:https://www.cnblogs.com/sean10/p/4956655.html

你可能感兴趣的文章
基于easyui的文档管理系统springmvc+mybaits实现
查看>>
英国Ofcom确定物联网频段 充分利用VHF甚高频部分频段
查看>>
linux 安装 node
查看>>
“不劳而获”的数字货币真的存在么?
查看>>
k8s拾遗 - Secret
查看>>
Android SparseArray 原理解析
查看>>
PHP类的定义
查看>>
Composer 中国镜像地址配置
查看>>
比特币暴跌后的连锁反应
查看>>
Python爬虫入门教程 62-100 30岁了,想找点文献提高自己,还被反爬了,Python搞起,反爬第2篇...
查看>>
第80节:Java中的MVC设计模式
查看>>
区块链100讲:以实例形式深入浅出讲透BANCOR算法
查看>>
Java并发编程 深入剖析volatile关键字
查看>>
java生成MD5校验码及算法实现
查看>>
thymeleaf 学习笔记(转)
查看>>
Mac 升级 OpenSSL
查看>>
Python学习笔记(5)-if判断、if嵌套、判断小练习
查看>>
文本转换成音频流
查看>>
负载均衡之lvs
查看>>
C#之类与对象知识点
查看>>