• 设计包含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; }
  • 相关阅读:
    奇迹银桥「1」
    20190729-“退役”专场
    20190727-只是睡着了
    $mathcal{Miemeng}$的病态码风计划
    20190725-Silly
    作业-[luogu4396][AHOI2013]-莫队
    数学网学笔记
    20190722-Moni和Boly的故事
    数学学习笔记
    20190719-FirstZero
  • 原文地址:https://www.cnblogs.com/idealing/p/3399954.html
Copyright © 2020-2023  润新知