zoukankan      html  css  js  c++  java
  • 设计包含min函数的栈

    题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数minpush以及pop的时间复杂度都是O(1)

    #include<stdio.h>
    #include<stdlib.h>
    #define M 100
    #define m 10
    struct minStack{
    int top;
    int tail;
    int *valueStack;
    int *indexStack;
    };
    void InitStack(minStack& s){
    s.top = 0;
    s.tail = 0;
    s.valueStack = (int*)malloc(sizeof(int)*M);
    s.indexStack = (int*)malloc(sizeof(int)*M);
    }
    void push(minStack*& s,int data){
    if(s.top - s.tail >= M){
      s.valueStack = (int*)realloc(s.valueStack,m);
      s.indexStack = (int*)realloc(s.indexStack,m);
    }
    if(!s.valueStack||!s.indexStack)
      return ;
    s.valueStack[s.top] = data;
    if(s.top == s.tail||min(s) > data)
      s.indexStack[s.top++] = s.top;
    else  
      s.indexStack[s.top++] = s.indexStack[s.top-1];
    }
    int min(minStack* s){
    if(s.top - s.tail == 0)
      return 0;
    return s.valueStack[s.indexStack[s.top-1]];
    }
    int pop(minStack& s){
    if(s.top - s.tail == 0)
      return 0;
    return s.valueStack[--s.top];
    }
    void DestoryStack(minStack s)
    free(s.valueStack);
    free(s.indexStack);
    }  
    int main(){
    minStack s;
    int data;
    printf("输入元素(0结束):
    ");
    scanf("%d",&data);
    while(data){
      push(s,data);
      printf("最小元素:%d
    ",min(s));
      printf("输入元素(0结束):
    ");
      scanf("%d",&data);
    }
    DestoryStack(s);
    return 0; }
  • 相关阅读:
    Mdate时间插件
    JS数组映射保存数据-场景
    基于微信的图片放大预览
    移动前端自适应布局适配解决方案
    JS数组映射详解
    回复与发表切换
    this应用详解-js原生
    淘宝虚拟产品自动发货软件
    搭建个人博客
    2019免杀大马
  • 原文地址:https://www.cnblogs.com/idealing/p/3399954.html
Copyright © 2011-2022 走看看