2010-07-17 5 views
1

어떻게 C++에서 스택을 코딩 할 수 있습니까?C++에서 스택 구현

#include <iostream> 
using namespace std; 
#define max 10 
class stack{ 

private: 
    int arr[max]; 
    int top; 
public: 
    stack(){ 

     top=-1;//empty initialy stack 

    } 

    void push(int i){ 
     top++; 
     if (top<max){ 

      arr[top]=i; 
     } 
     else{ 
      cout<<"stack full"<<endl; 
      top--; 
    } 

    } 
int pop(){ 

    if (top==-1){ 
     cout<<"stack is emphty"); 
    return NULL; 
    } 
    else{ 
     int data=arr[top]; 
     arr[top]=NULL; 
     top--; 

    return data; 
} 
} 
bool empty(){ 

    return (top==-1); 

} 
}; 
int main(){ 

    stack a; 
    a.push(12); 
    a.push(30); 
    a.push(23); 
    a.push(42); 
    a.push(100); 
    while (!a.empty()){ 
     a.pop(); 



    } 



    return 0; 
} 

을하지만, 나는 다음과 같은 오류를 얻을 : 다음과 같이 나는이에게 자신을 시도했다 당신은 라인 (31)에 길잃은 대괄호있어

1>------ Build started: Project: stack_implementations, Configuration: Debug Win32 ------ 
1> stak_implementation.cpp 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(31): error C2059: syntax error : ')' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(34): error C2059: syntax error : 'else' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(34): error C2334: unexpected token(s) preceding '{'; skipping apparent function body 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(42): error C2628: 'stack' followed by 'bool' is illegal (did you forget a ';'?) 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(44): error C2065: 'top' : undeclared identifier 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(31): error C2143: syntax error : missing ';' before '}' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2059: syntax error : '}' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2143: syntax error : missing ';' before '}' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2059: syntax error : '}' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(56): error C2039: 'empty' : is not a member of 'stack' 
1>   c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(4) : see declaration of 'stack' 
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(56): fatal error C1903: unable to recover from previous error(s); stopping compilation 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+0

학교 과제물입니까? 좋은 생각은 읽기 쉽도록 코드의 들여 쓰기를 개선하는 것입니다. –

+0

commententing 잊지 마세요 그리고 또한 C + + const를 사용할 수 있습니다, 어쩌면 당신은 나중에 여분의 프로그램으로 템플릿으로 그것을 던져 예외 스택을 가득 경우. – Quonux

답변

1

필요한 경우 상태 (변수, 멤버 등) 만 변경하면 코드가 오류가 발생하기 쉽고 읽고 명확하게됩니다. 따라서 푸시 기능을

void push(int i){ 
    if (top<max-1){ 
     arr[++top]=i; 
    } 
    else{ 
     cout<<"stack full"<<endl; 
    } 
} 

으로 다시 작성하면 더 깨끗합니다. 또한 const는 유형 안전이며 #define은 그렇지 않으므로 const int max=10#define max 10보다 선호됩니다.

스택이 정수 스택이므로 할당 arr[top]=NULL의 NULL이 int로 변환되고 할당은 arr[top]=0으로 해석됩니다. 요소가 갑자기 꺼내지면 스택 외부에 있기 때문에 할당을 모두 제거 할 수 있으므로 0인지 여부는 중요하지 않습니다.

나는 예약 된 '포인터가 아닌'값 -1을 피하기 위해 top을 마지막으로 사용한 포인터 항목 대신 다음 사용 가능한 스택 항목에 대한 포인터로 사용합니다.

5

을;

cout<<"stack is emphty"); 

수정하고 다른 "오류"가 사라지는 것을 확인하십시오.

즉시 발견하지 않도록하십시오. 그것은 나에게 여러 번 일어났습니다. 심각한 오류가 코드에 잘못되어있어 사소한 오타 및 맞춤법 오류를 발견하지 못했다는 것을 확신합니다.

+0

예 감사합니다 모두들 고마워요. –

1

컴파일러에서보고 한 바와 같이 31 행에 불균형 괄호가 있습니다.

cout<<"stack is emphty"); 

해당 컴파일러 오류를주의 깊게 읽으십시오. 그들은 보통 문제를 바로 지적합니다.