zoukankan      html  css  js  c++  java
  • 简单的栈

    #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;    
        }
        
    }
  • 相关阅读:
    排序算法与数据结构复习总结
    Kafka知识总结及面试题
    深入理解Redis系列之事务
    深入理解Redis系列之持久化
    基于数据库、redis和zookeeper实现的分布式锁
    深入理解MySQL系列之优化
    Mysql-主从复制(Docker)
    Mysql-GTID主从复制
    Ansible基础
    Nginx + php-fpm源码编译
  • 原文地址:https://www.cnblogs.com/23lalala/p/2703638.html
Copyright © 2011-2022 走看看