zoukankan      html  css  js  c++  java
  • 栈的应用_回文字符的判定

    stack.h

    #ifndef stack_h__
    #define stack_h__
    
    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    enum boolean{FALSE, TRUE};
    typedef enum boolean BOOL;
    typedef int ElementType;
    typedef struct stack_def{
        ElementType* data;
        int top;
        int sz;
        int length;
    }stack;
    void initStack(stack* s, int sz);
    BOOL isEmpty(stack s);
    BOOL isFull(stack s);
    BOOL Pop(stack* s);
    BOOL Push(stack* s, ElementType e);
    ElementType getTop(stack s);
    void destoryStack(stack* s);
    #endif // stack_h__

    stack.c

    #include "stack.h"
    
    void initStack(stack* s, int sz){
        if (sz < 0){
            puts("sz < 0");
        }
        else{
            s->top = -1;
            s->sz = sz;
            s->length = 0;
            s->data  = (ElementType*)malloc(sizeof(ElementType)*s->sz);
            if (s->data == NULL)
                puts("s->data == NULL");
        }
    }
    
    BOOL isEmpty(stack s){
        return(BOOL)(s.length==0);
    }
    
    BOOL isFull(stack s){
        return(BOOL)(s.length==s.sz);
    }
    BOOL Pop(stack* s){                             // 出栈,并不返回此元素值
        if (isEmpty(*s)){
            return FALSE;
        }
        s->top--;
        s->length--;
    }
    
    BOOL Push(stack* s, ElementType e){         // 入栈
        if (isFull(*s)){
            return FALSE;
        }
        s->data[++s->top] = e;
        s->length++;
        return TRUE;
    }
    
    ElementType getTop(stack s){
        if (isEmpty(s)){
            puts("stack s  is empty.");
            exit(1);
        }
    
        return s.data[s.top];
    }
    void destoryStack(stack* s){
        free(s->data);
    }

    main.c

    #include  "stack.h"
    #include <string.h>
    
    int isSpecalStr(char *str, int str_len){                //判断是否为回文字符串
        stack s1, s2, tmp;
        int i, ret = 1;
        ElementType e;
    
        initStack(&s1, str_len/2);
        initStack(&s2, str_len/2);
        initStack(&tmp, str_len/2);
    
        for (i=0; i<str_len/2; i++){
            Push(&s1, str[i]);
            Push(&tmp, str[i+str_len/2]);
        }
        while (!isEmpty(tmp)){
            Push(&s2, getTop(tmp));
            Pop(&tmp);
        }// end while
    
        while (!isEmpty(s1) && !isEmpty(s2)){
            if (getTop(s1) != getTop(s2)){
                ret = 0; break;
            }
            Pop(&s1); Pop(&s2);
        }// end while 
    
        destoryStack(&s1);
        destoryStack(&s2);
        destoryStack(&tmp);
        return ret;
    }
    
    
    int main(){
        char str[50];
        stack s;
        int len ;
        initStack(&s, 50);
        printf("输入一个字符串:");
        gets(str);
        len = strlen(str);
        if (isSpecalStr(str, len))
            puts("YES");
        else
            puts("NO");
        return 0;
    }

    运行结果:
    结果1
    结果2
    结果3

  • 相关阅读:
    阿里云-Redis-Help-最佳实战:将MySQL数据迁移到Redis
    阿里云-Redis-实战场景:互联网类应用
    阿里云-Redis-实战场景:电商行业类应用
    术语-计算机-性能:RT
    术语-计算机-性能:并发数
    术语-计算机-性能:TPS
    术语-计算机-性能:QPS
    阿里云-Redis-实战场景:游戏服务类应用
    阿里云-Redis-实战场景:视频直播类应用
    文章-依赖注入:《Inversion of Control Containers and the Dependency Injection pattern》
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538396.html
Copyright © 2011-2022 走看看