• 简单的栈


    #include <stdio.h>
    #define null 0
    #define maxSize 5
    
    //存放栈内元素
    data[maxSize];
    //栈顶指针
    int top = -1;
     
    void push(int e){
        if(top+1 < maxSize){
            data[++top] = e;
            printf("push %d \n",e);
        }else{
            printf("stack is full\n");
        }                
    }
    
    void pop(){
        if(top > -1){
            printf("%d poped\n",data[top--]);
        }else{
            printf("stack is empty\n");
        }
    }
    
    int main(){
        push(1);
        push(2);
        push(3);
        push(4);
        push(5);
        push(6);
        pop();
        pop();
        pop();
        pop();
        pop();
        pop();
        return 0;
    }

    相关题目

    1.输入入栈序列,判断出栈序列是否合法。

    in = {1,2,3,4,5} out={4,5,3,2,1}

    解法就是用一个栈来模拟

    i=0;j=0;

    while(i<n){

      s.push(in[i++]);

      while(!s.empty()&&s.peek()==out[j]){

        out.pop();j++;  

      }

    }

    return s.empty();

    2.颠倒一个栈

    解法:取出栈顶元素,然后将其余的元素颠倒,将取出的元素放在栈的最底下

    void putToButtom(stack* s,object* o){

      if(s.empty()){

        s.push(o);

      }else{

        object o2 = s.pop();

        putToButtom(s,o);

        s.push(o2);

      }

    }

    void rev(stack* s){

      object o = s.pop();

      rev(s);

      putToBottom(s,o);

    }

    3.括号匹配问题

    有一行括号序列,(,[,{,},],)的任意组合。请你检查这行括号是否配对。

    void* convert(char c){
        if(c=='('){
            return (void*)')';
        }
        if(c=='['){
            return (void*)']';
        }
        if(c=='{'){
            return (void*)'}';
        }
        printf("转换错误\r\n");
        return (void*)ERROR;
    }
    
    int is_valid_seq(const char* str){
        if(str==NULL){
            return 0;
        }    
        //初始化一个辅助栈 
        Stack* s = malloc(sizeof(Stack));
        s->top = -1;
        while(*str != '\0'){
            if(*str=='('||*str=='['||*str=='{'){
                push(s,convert(*str));    
            }
            if(*str==')'||*str==']'||*str=='}'){
                char c = (char)peek(s);
                if(c==*str){
                    pop(s);
                }else{
                    free(s);
                    return 0;
                }    
            }
            str++;
        }
        if(empty(s)){
            free(s);
            return 1;
        }else{
            free(s);
            return 0;    
        }
        
    }
  • 相关阅读:
    自定义指令
    freemarker 数据类型
    hibernate简单的增删改查
    hibernate增删改查
    Hibernate HQL查询语句总结
    Hibernate配置详细解释
    Filter过滤器
    日志统计
    分页-模糊查询
    分页
  • 原文地址:https://www.cnblogs.com/23lalala/p/2703638.html
Copyright © 2020-2023  润新知