2013年1月21日

C++ 使用Array實作Stack

Stack,就是堆疊,他的構造像是一個籃子,不管怎麼樣你都只能對

最上面的資料去做處理。 而他只有兩種操作模式:1.POP 2.PUSH

POP就是取出堆疊最上層的資料,而PUSH就是塞入資料至資料最上層。

如圖所示。


本篇是利用Array達到stack的功能。

簡單的範例如下所示:

一開始先決定堆疊大小

分別PUSH a b c
再PUSH則會告知堆疊已滿 (因為超出堆疊限定大小)
POP時顯示被POP的資料

可列出目前堆疊資料


=========StackObject.h============
#ifndef STACKOBJECT_H
#define STACKOBJECT_H
#include <iostream>

class StackObject{
public:
    StackObject();
    ~StackObject();
    void Add();
    void Delete();
    void List();
private:
    int Top;
    char *Arr;
    int MAX;
};


#endif


=========StackObject.cpp============
#include "StackObject.h"
using namespace std;
StackObject::StackObject(){
    Top=-1;
    cout<<"請輸入堆疊大小"<<endl;
    cin>>MAX;
    Arr=new char[MAX];
}

StackObject::~StackObject(){
    delete []Arr;
}

void StackObject::Add(){
    if(Top==MAX-1){
        cout<<"堆疊已滿"<<endl;
    }else{
        Top++;
        cout<<"請輸入字元"<<endl;
        cin>>Arr[Top];
        cout<<"輸入完畢謝謝!"<<endl;
    }
}


void StackObject::Delete(){
    if(Top<0){
        cout<<"堆疊為空,並無資料"<<endl;
    }else{
        cout<<"刪除的資料為:"<<Arr[Top]<<endl;
        Top--;
    }
}

void StackObject::List(){
    if(Top<0){
        cout<<"堆疊為空,並無資料"<<endl;
    }else{
        for(int i=0;i<Top+1;i++){
            cout<<"第"<<i+1<<"筆資料為:"<<Arr[i]<<endl;
        }
    }
}


=========main============
#include <iostream>
#include "StackObject.h"
using namespace std;
int main()
{
    char option;
    StackObject stack;
    while(1){
        cout<<"=========="<<endl;
        cout<<"1.PUSH"<<endl;
        cout<<"2.POP"<<endl;
        cout<<"3.List All Data"<<endl;
        cout<<"4.Quit"<<endl;
        while(cin.get(option)&&option=='\n');
            switch(option){
            case '1':stack.Add();
                break;
            case '2':stack.Delete();
                break;
            case '3':stack.List();
                break;
            case '4':
                system("PAUSE");
                return 0;
            }
    }
}

by Victor

沒有留言:

張貼留言