• Plan


    四月数据结构学习的相关点

     

    利用栈的特性 来判断输入的是否是回文

    /*SS
    应用顺序栈实现回文(Palindromic Sequence)判断,具体如下:
        试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如"序列1&序列2"模式的字符序列。
    	其中序列1和序列2中都不含字符"&",且序列2是序列1的逆序列。例如,"a+b&b+a"是属于该模式的字符序列,
    	而"1+3&3-1"则不是。
    
    */
    #include<stdio.h>
    #include<stdlib.h>
    
    #define ERROR 0
    #define OK 1
    #define MAX 100
    
    //顺序栈的定义
    typedef char DataType;//栈中的元素类型为char
    typedef struct LNode
    {
    	DataType elem[MAX];
    	int top;//栈顶位置
    }SeqStack;
    
    //基本操作
    //栈的初始化
    void initStack (SeqStack *S)
    {
    	S->top=-1;
    }
    //进栈
    int push(SeqStack *S, DataType x)
    {
    	if(S->top==MAX-1)
    	{	
    		printf("full
    ");
    		return ERROR;
    	}
    	S->top++;
    	S->elem[S->top]=x;
    	return OK;
    }
    //出栈
    int pop(SeqStack *S, DataType *x)
    {
    	if(S->top==-1)
    	{
    		printf("empty
    ");
    		return ERROR;
    	}
    	*x=S->elem[S->top];
    	S->top--;
    	return OK;
    }
    //取栈顶元素
    int getTop(SeqStack *S, DataType *x)
    {
    	if(S->top==-1)
    	{
    		printf("empty
    ");
    		return ERROR;
    	}
    	*x=S->elem[S->top];
    	return OK;
    }
    
    
    int Palindromic(char str[])
    {
    	SeqStack S;
    	initStack (&S);
    	
    	int i;
    	for(i=0; str[i]!='' && str[i]!='@' && str[i]!='&'; i++)//将&符号之前的序列1入栈
    		push(&S, str[i]);
    	if(str[i]=='' || str[i]=='@')//若没有&符号
    	{
    		printf("there is no &
    ");
    		return ERROR;
    	}
    
    	i++;//跳过&符号
    
    	for( ; str[i]!='' && str[i]!='@'; i++)//对&符号之后的序列2,按照字符一个一个进行操作
    	{
    		DataType x;
    		if(pop(&S, &x)==0)//将栈顶元素出栈,存储在x中,若栈为空,则说明序列2比序列1长,不是回文序列
    		{
    			printf("this is not a palindromic sequence.
    ");
    			return ERROR;
    		}
    		if(x!=str[i])//若序列1与序列2的字符不一样,则说明不是回文序列
    		{
    			printf("this is not a palindromic sequence.
    ");
    			return ERROR;
    		}
    	}
    
    	if(S.top!=-1)//若栈非空,则说明序列1比序列2长,不是回文序列
    	{
    		printf("this is not a palindromic sequence.
    ");
    		return ERROR;
    	}
    	printf("yes");
    	return OK;
    }
    
    
    
    void main()
    {
    	char str[MAX];
    	gets_s(str);//读入字符序列
    	Palindromic(str);//回文判断
    }
    

      

  • 相关阅读:
    PageRank
    Web挖掘
    无监督学习
    Activiti 学习笔记记录(2016-8-31)
    Activiti 学习笔记记录(二)
    Activiti 学习笔记记录
    Mybatis + SpringMVC + Maven实现分页查询
    Jquery.min.js 下载
    使用Apache Archiva搭建Maven Repository Server
    SpringMVC 参数传递
  • 原文地址:https://www.cnblogs.com/whilom/p/12811629.html
Copyright © 2020-2023  润新知