2014-10-20 171 views
0

其實我想用簡單的結構實現堆棧。簡單堆棧實現

爲什麼下面的代碼顯示垃圾而不是項目?堆棧完全推下一個項目後,它會無限?還有其他方法可以使用數組來實現堆棧。但我想試試這個。

我們怎麼能不使用指針來實現堆棧?

#include <iostream> 
#define size 5 

using namespace std; 

int main() 
{ 
    int s[size]; 
    int top = -1,item,choice; 
    char ans; 

    do { 
     cout << " ======================="; 
     cout << " \n|Implementation of Stack|\n"; 
     cout << " ======================="; 
     cout<<"\n MAIN NENUE"; 
     cout<<"\n 1. Push \n 2. Pop \n 3.Display "; 
     cin>>choice; 
     switch (choice) { 
     case 1: 
      cout<<"\n Enter the Item to be Pushed "; 
      cin>>item; 
      if (top != size -1) { 
       top++; 
       top = item; 
      } else { 
       cout<<"\nStack is Full "; 
      } 

     break; 
     case 2: 
      if (top == -1) { 
       cout<<"\n Stack is Empty "; 
      } else { 
       int item; 
       item = s[top]; 
       top--; 
      } 
      break; 
     case 3: 
      if (top == -1) { 
       cout<<"\n Stack is Empty "; 
      } else { 
       for (int i = top; i >= 0; i--) { 
        cout<<"|" << s[i] << "|"<<endl; 
       } 
      } 

      break; 

     default: 
      cout<<" \n You have Pressed Invalid Key"; 
      break; 
     } 

     cout<<"\n Do You Want To Continue "; 
     cin>>ans; 
    } while (ans == 'Y' || ans=='y'); 

    return item; 
} 
+0

!C = C++ ..都是不同的語言 – Haris 2014-10-20 17:08:14

+2

你真的沒有一個「數據結構」在這裏,只是一些變數。如果你正在學習C++,你想從一個'class'開始。而且,C和C++可以與最新標準大不相同。一般來說,你不應該跨標籤。 – crashmstr 2014-10-20 17:08:49

+1

爲什麼不讓你的堆棧成爲一個類,所以邏輯與I/O是分開的,因此更容易停止問題。 – 2014-10-20 17:08:56

回答

1

其實你從來沒有推元素到您的stack

將您的push代碼更改爲此。

if (top < (size -1)) { 
      ++top; 
      s[top] = item; 
     } 
1

相反,這些語句

 if (top != size -1) { 
      top++; 
      top = item; 

 if (top != size -1) { 
      s[++top] = item; 

你可以添加一些有用的功能,爲您的堆棧。例如

int s[size]; 
int top = -1,item,choice; 
char ans; 

auto is_empty = [&top] { return top == -1; }; 
// ... 

,那麼你可以寫

case 3: 
     if (is_empty()) { 
      cout<<"\n Stack is Empty "; 
     } else { 
      for (int i = top; i >= 0; i--) { 
       cout<<"|" << s[i] << "|"<<endl; 
      } 
     } 

     break; 
+0

你應該真的解釋_why_,爲了幫助... – 2014-10-20 17:13:56

+1

@LightnessRacesinOrbit你是對的!它沒有幫助 – 2014-10-20 17:25:30

+0

它不起作用 – 2014-10-20 17:25:45

1

我認爲這個問題是在你第一次if聲明。您應該分配給items[top]top(那是因爲你必須存儲在item陣列s[]):

if (top != size -1) { 
    top++; 
    s[top] = item; 
} 
+0

仍然是同樣的問題。 – 2014-10-20 17:23:39

+2

我剛纔測試了代碼。推/流行/顯示工作正常。你確定你仍然在輸出垃圾嗎? – Seprum 2014-10-20 17:28:27