通过栈与队列相关内容的学习,我们知道,栈是"先进后出"的线性表,而队列是"先进先出"的线性表。可以通过构造栈与队列来实现在这一算法。将要判断的字符序列依次压栈和入队。然后依次出栈和出队,通过比较出栈的字符序列与出队的字符序列是否相同来判断读入的字符序列是否为回文序列。如果全部相同则是回文序列,否则不是回文序列。

使用链式栈实现这一算法。



#include <stdio.h>
#include <stdlib.h>
#include "SStact.h" //自定义头文件,存储链式栈的基本操作,**文件在最后自取**
/*------*/
int main(){ char c;
SeqStack *s;
int i = 0;
char ch[STACK_INIT_SIZE];
s = (SelemType *)malloc(sizeof(SelemType));
InitStack(s); while((c = getchar())!= '\n')
{
ch[i++] = c;
push(s,c); }
int j = 0; while(!IsEmpty(s))
{
Pop(s,&c);
if(c!=ch[j++])
{
printf("不是回文");
return 0;
} }
printf("是回文"); }

"SStact.h" :

点击查看代码

#define TURE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SelemType;
/*---动态分配栈--*/
typedef struct
{
SelemType *base;
SelemType *top;
int StackSize;
} SeqStack;
/*---初始化---*/
int InitStack(SeqStack *s)
{
s->base = (SelemType *)malloc(STACK_INIT_SIZE*sizeof(SelemType));
if(!s->base)
printf("创建失败");
else
{
s->top = s->base;
s->StackSize = STACK_INIT_SIZE;
}
}
/*---判断栈是否为空---*/
int IsEmpty(SeqStack *s)
{
if(s->top==s->base)
{
return TURE;
}
else
{
return FALSE;
}
} /*---入栈操作---*/
int push(SeqStack *s,SelemType x)
{
if((s->base)-(s->base)==s->StackSize)
{
s->base = (SelemType *)malloc(STACK_INIT_SIZE*sizeof(SelemType));
if(s->base==NULL)
{
return FALSE;
}
s->top =s->base+s->StackSize;
s->StackSize +=STACKINCREMENT;
}
else
{
*s->top = x;
s->top++;
return(TURE);
}
}
/*---出栈操作---*/
int Pop(SeqStack *s,SelemType *x)
{
if(s->top==s->base)
{
return FALSE;
}
else
{
s->top--;
*x = *s->top;
return (TURE); }
}

【数据结构】<栈的应用>回文判断的更多相关文章

  1. 链表回文判断(基于链表反转)—Java实现

    学习数据结构的时候遇到一个经典的回文链表问题 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 如果有链表反转的基础,实现链表回文判断就简单的多,如 ...

  2. c++实验4 栈及栈的应用+回文+中、后缀表达式

    栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType ...

  3. 单链表的回文判断(O(n)时间复杂度和O(1)的空间复杂度)

    对于单链表来说,判断回文最简单的方法就是遍历链表,将链表中的元素复制到数组中,然后对数组进行判断是否是回文数组,但是这不符合O(1)的空间复杂度. 由于空间复杂度的要求,需要就地操作链表,不能开辟多余 ...

  4. 算法笔记_030:回文判断(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 给定一个字符串,如何判断这个字符串是否是回文串? 所谓回文串,是指正读和反读都一样的字符串,如madam.我爱我等. 2 解决方案 解决上述问题,有 ...

  5. Java实现回文判断

    1 问题描述 给定一个字符串,如何判断这个字符串是否是回文串? 所谓回文串,是指正读和反读都一样的字符串,如madam.我爱我等. 2 解决方案 解决上述问题,有两种方法可供参考: (1)从字符串两头 ...

  6. 字符串回文判断 js练习

    / 判断一个字符是否为回文,abcba是回文,. /*function fn2(str){ var str1=''; for(var i=str.length-1;i>=0;i--){ str1 ...

  7. Python数据结构与算法_回文数(03)

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true 示例 2: 输入: -121输出: false解释: 从左向右读, ...

  8. 链表回文判断(C++)

    题目描述: 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构.保证链表长度小于等 ...

  9. JAVA关于回文判断的实现

    (一). 设计思想: 首先输入字符串,然后判断长度若长度为0或1则输出TRUE若长度大于一则进行判断, 若符合条件则输出TRUE反之输出FALSE. (二)程序源代码 import java.util ...

随机推荐

  1. system的使用

    <stdio.h>       std是一个标准库,i =input   o =output      标准输入输出库    .h头文件   system的使用   功能:在已经运行的程序 ...

  2. ucosii操作系统内核源码学习第一篇

    根据书本理论介绍以及实际看内核源代码得出: 1. 操作系统默认定义了64个TCB块(为全局变量,编译时候以及分配了,创建一个任务就使用一个,删除一个任务就归还一个)(为什么最大只支持64个任务呢,我们 ...

  3. Django的form组件基本使用——简单校验

    from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...

  4. zset类型数据的操作指令

    1. 也可以追加数据 2. 3. 4. 5. 6. 7. 8. 9.

  5. 史上最全git命令集

    配置化命令 git config --global user.name "Your Name" git config --global user.email "email ...

  6. 地址栏url中去掉所有参数

    1.地址栏url中去掉所有参数,这个是纯前端解决,很多时候页面跳转时候会选择在url后面带参数过去,(使用?&),方便传也方便取,但是我们要做的是不要让页面的一些请求参数暴露在外面 正常项目工 ...

  7. 完美数java

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为&q ...

  8. k8s标签label

    1.给节点设置标签 一遍pod部署选择 kubectl label node 节点名 disktype=ssd kubectl label node master1 disktype=ssd 效果 [ ...

  9. 字符串出现的topK问题

    /** * return topK string * @param strings string字符串一维数组 strings * @param k int整型 the k * @return str ...

  10. 修改 CubeMX 生成的 RT-Thread makefile 工程

    修改 CubeMX 生成的 RT-Thread makefile 工程 使用 RT-Thread 官方 基于 CubeMX 移植 RT-Thread Nano 生成的 Makefile 工程在编译时有 ...