2017-07-29 8 views
-2

動的にMinStackを初期化することはできません。どうして?クラスMinStackが出力しない

#include<bits/stdc++.h> 
#include<iostream> 
#include<stdlib.h> 
using namespace std; 
class Stack 
{ 
    int top; 
    int length; 
    int *arr; 
public: 
     //Maximum size of Stack 

    Stack(int len) 
    { 
     top = -1; 
     length=len; 
     arr=new int[length]; 
    } //constructor 

    void push(int data); 
    int pop(); 
    bool isEmpty(); 
    bool isStackFull(); 
    int Size(); 
    void Display(); 
    int getPeek(); 

}; 

void Stack::push(int data) 
{ 
    if (isStackFull()) 
    { 
     cout << "Stack Overflow"<<endl; 
    } 
    else 
    { 
     arr[++top] = data; 
    } 
} 

int Stack::pop() 
{ 
    if (isEmpty()) 
    { 
     cout << "Stack Underflow"<<endl; 
     return 0; 
    } 
    else 
    { 
     int data = arr[top--]; 
     return data; 
    } 
} 

bool Stack::isEmpty() 
{ 
    return (top < 0); 
} 

bool Stack::isStackFull() 
{ 
    return (top == length-1); 
} 

int Stack::Size() 
{ 
    return (top +1); 
} 

int Stack::getPeek() 
{ 
    return arr[top]; 
} 

void Stack::Display() 
{ 
    for(int i=top;i!=-1;i--) 
    { 
     cout<<arr[i]<<" "; 
    } 
    cout<<endl; 
} 


class SpecialStack: public Stack 
{ 

public: 
    Stack min1; 
    SpecialStack(int len):Stack(len) 
    { 
     min1= new Stack(len); 
    } 
    int pop(); 
    void push(int x); 
    int getMin(); 
}; 
void SpecialStack::push(int x) 
{ 
    if(isEmpty()==true) 
    { 
     Stack::push(x); 
     min1.push(x); 
    } 
    else 
    { 
     Stack::push(x); 
     int y = min1.pop(); 
     min1.push(y); 
     if(x < y) 
     min1.push(x); 
     else 
     min1.push(y); 
    } 
} 

/* SpecialStack's member method to remove an element from it. This method 
removes top element from min stack also. */ 
int SpecialStack::pop() 
{ 
    int x = Stack::pop(); 
    min1.pop(); 
    return x; 
} 

int SpecialStack::getMin() 
{ 
    int x = min1.pop(); 
    min1.push(x); 
    return x; 
} 

int main() 
{ 
    SpecialStack s(3); //size of stack should be 3 
    s.push(10); 
    s.push(20); 
    s.push(30); 
    cout<<s.getMin()<<endl; 
    s.push(5); 
    cout<<s.getMin(); 
    return 0; 
} 

動的にMinStackを初期化することはできません。なぜ、この問題を解決する方法を教えてください。

+0

申し訳ありませんが、同じ質問をもう一度お願いします。 – Kamal

答えて

0

SpecialStackコンストラクタでは、Stackのメンバーが正しく初期化されますが、min1メンバーは初期化されません。彼らは同じように処理しなければならない:あなたはコンストラクタ初期化子リストでmin1を持っていない場合は

SpecialStack(int len):Stack(len),min1(len) 
{ } 

、コンパイラの試みがデフォルトのコンストラクタを呼ぶのですが、しかしStackクラスが1を持っていません。

+0

ありがとう@ボ・ペルソンそれは本当に助けた! – Kamal

関連する問題