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; }
  • 相关阅读:
    网络编程-Python的socket库
    Python -用虚拟环境保存库文件
    Python --文件的读写
    VIM--常用操作
    libpcap -学习1
    Python -装饰器
    C++ 关于map,function的简单应用
    UVAlive 3635 (13.08.23)
    C语言中的整型提升(integral promotion)
    [置顶] 从一位数组中提取最小k个元素
  • 原文地址:https://www.cnblogs.com/idealing/p/3399954.html
Copyright © 2011-2022 走看看