zoukankan      html  css  js  c++  java
  • 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)

    1.  1 #define STACK_LEN 50  
       2 
       3 typedef struct  
       4 {  
       5      int     data;  
       6 
       7      int     min;  
       8 } StackItem;  
       9 
      10 typedef struct  
      11 {  
      12      StackItem      data[ STACK_LEN ];  
      13      int   top;  
      14 } Stack;  
      15 
      16 void push( stack *S, int val )  
      17 { 
      18      S->data[ S->top ].data = val;  
      19      if ( ( S->top )> 0 )  // 保证栈顶元素中的min始终为当前栈中最小值
      20      {  
      21            if ( val < ( S->data[ S->top - 1 ].min ) ) // 如果当前push进的元素小于栈中最小元素值  
      22                 S->data[ S->top ].min = val;   // 把当前元素置为栈中最小元素值 
      23            else // 否则,不更新  
      24                 S->data[ S->top ].min = S->data[ S->top - 1 ].min;   
      25      } 
      26      else  
      27            S->data[ S->top ].min = val;  
      28 
      29     S->top++; 
      30 
      31 }  
      32 
      33 int pop( stack *S )  
      34 {  
      35      return S->data[ S->top-- ].data;  
      36 }  
      37   
      38 int min( stack *S )  
      39 {  
      40      return S->data[ S->top ].min;  
      41 }
  • 相关阅读:
    前人风采
    【C++ Primer 第16章】1. 定义模板 (一)
    CCF CSP认证考试试题
    【C++ Primer 第11章】4. 无序容器
    【C++ Primer 第11章 练习答案】2. 关联容器操作
    【C++ Primer 第11章】2. 关联容器操作
    dxRatingControl使用
    dxRangeTrackBar使用教程
    UniConnectDialog使用
    Delphi窗体置顶及失去焦点后取得焦点
  • 原文地址:https://www.cnblogs.com/kevinGaoblog/p/2431904.html
Copyright © 2011-2022 走看看