• 老师布置的一道基础的关于栈的操作题


           试写一个算法,识别依次读入的一个以@为结束答的字符序列是否为形如“序列1&序列2”模式字符序列。其中序列1和序列2中都不含字符“&”,且序列2是序列1的逆序列。例如,“a+b&b+a”是属该模式的字符序列,而“1+3&3-1”则不是。(提示:可以先让&序号前的前栈,然后让后面的字符依次与出栈后的元素对比,还是利用了栈先进后出的思想,如果中间每个字符都相同,并且最后栈是空的,而可以说是一个的模式。可以借鉴上面第三步中已经实现的栈和程序,在上面添加一个判断函数,通过主函数调用完成)

    #include <stdio.h>
    #include <string.h>
    typedef char ElemType;
    #define MaxSize 100
    typedef struct
    {
    	ElemType data[MaxSize];
    	int top;
    } STACK;
    void InitStack(STACK *s)
    {
    	s->top=-1;
    }
    int Push(STACK *S, ElemType x)
    {
    	if (S->top==MaxSize -1){
    		printf("\n Stack is full!");
    		return 0;
    	}
    
    		S->top++;
    		S->data[S->top]=x;
    		return 1;
    
    }
    int Empty(STACK *S)
    {
    		return(S->top==-1?1:0);
    }
    int Pop(STACK *S,ElemType *x)
    {
    	if (Empty(S))
    		return 0;
    
    		*x=S->data[S->top];
    		S->top--;
    		return 1;
    
    }
    int GetTop(STACK *S,ElemType *x)
    {
    	if (Empty(S))
    		return 0;
    
    		*x=S->data[S->top];
    		return 1;
    
    }
    
    void main()
    {
    	int i,j,len;
    	STACK st;
    	ElemType e,a[MaxSize];
    	printf("输入一段字符串以@结束,并判断是否形如“序列1&序列2”且序列2是序列1的逆序列\n");
    	while(1)//死循环,使多次输入
    	{
    	InitStack(&st);
    	gets(a);
    	len=strlen(a);
    	for(i=0;;i++)
    	{
    		if(a[i]=='&'||a[i]=='@')
    			break;
    		else
    			Push(&st,a[i]);
    	}
    	if((len-2)!=2*i)/*判断字符串在&左右的序列是否长度相同,若不同直接输出不是*/
        {printf("不是\n");continue;}
    	for(i++;;i++)
    	{
    		if(a[i]=='@')
    			break;
    		else
    		{
    		GetTop(&st,&e);
    		if(e!=a[i])
    			break;
    		else
    			Pop(&st,&e);
    		}
    	}
    	if(Empty(&st))
    		printf("是\n");
    	else
    		printf("不是\n");
    }
    }


  • 相关阅读:
    zookeeper单机环境搭建
    js中获取url?后面的参数值
    【转】java 、javaw、javaws命令的区别
    【转】解决 linux和widows双系统时差8个小时问题
    IntrospectorCleanupListener作用
    Linux 网络相关命令
    SAS:提取数据集观测,宏参数
    sas share
    SAS:多个LOG的批量查询
    SAS:日期,字符数值转换
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082173.html
Copyright © 2020-2023  润新知