POJ 1028 Web Navigation(物件導向棧的封裝)

來源:互聯網
上載者:User

       這道題的題幹已經將這道題的解法解釋的很清楚了。維護兩個棧,一個forward棧和一個backward棧,然後就是各個命令對應的具體的操作。

首先起始階段是訪問:http://www.acm.org/ 

VISIT命令:將當前頁面壓入backward棧中,然後清空forward棧,然後將給出的url作為當前的訪問頁面。

BACK命令:如果backward棧不為空白,那麼將cur壓入forward棧中,然後將backward棧頂元素作為當前頁面;否則忽略該命令。

FORWARD命令:如果forward棧不為空白,那麼將cur壓入backw棧中,然後從forw的棧頂元素作為當前頁面;否則忽略該命令。

最後就是QUIT命令了。

按照上面方法,進行棧的維護就行了。

我的做法是直接自己先封裝了一個MyStack的類,然後提供了棧所應該具有的功能的介面,就這樣子用C++搞定了。下面可以看看My Code:

#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;string op,cur;class MyStack{private:    string st[150];    int top ;public:    MyStack();    void Push(string x);    string Top();    void Pop();    void Clear();    bool IsEmpty();};MyStack::MyStack(){    top = -1;}string MyStack::Top(){    return st[top];}void MyStack::Pop(){    top--;}void MyStack::Clear(){    top = -1;}bool MyStack::IsEmpty(){    if(top == -1)        return true;    else        return false;}void MyStack::Push(string x){    st[++top] = x;}int main(){    //freopen("out.txt","w",stdout);    MyStack forward,backward;    cur = string("http://www.acm.org/");    while(1)    {        bool flag = true;        cin>>op;        if(op.compare("QUIT") == 0)            break;        else if(op.compare("VISIT") == 0)        {            string temp;            cin>>temp;            backward.Push(cur);            forward.Clear();            cur = temp;        }        else if(op.compare("BACK") == 0)        {            if(!backward.IsEmpty())            {                forward.Push(cur);                cur = backward.Top();                backward.Pop();            }            else            {                flag = false;                cout<<"Ignored"<<endl;            }        }        else if(op.compare("FORWARD") == 0)        {            if(!forward.IsEmpty())            {                backward.Push(cur);                cur = forward.Top();                forward.Pop();            }            else            {                flag = false;                cout<<"Ignored"<<endl;            }        }        if(flag)            cout<<cur<<endl;    }    return 0;}

另外我自己再寫了一個Java版本的棧的封裝,差不多的思路吧!學習Java的可以看看……

import java.util.*;import java.io.*;class MyStack{private String [] st = new String [150];private int top;public MyStack(){top = -1;}public void Pop(){top--;}public String Top(){return st[top];}public void Clear(){top = -1;}public void Push(String x){st[++top] = x;}public boolean IsEmpty(){if(top == -1)return true;elsereturn false;}}public class Main{public static void main(String [] args){MyStack backward = new MyStack();MyStack forward = new MyStack();Scanner cin = new Scanner(System.in);String cur = new String("http://www.acm.org/");String op;while(cin.hasNext()){boolean flag = true;op = cin.next();if(op.compareTo(new String("QUIT")) == 0)break;else if(op.compareTo(new String("VISIT")) == 0){String temp;temp = cin.next();backward.Push(cur);forward.Clear();cur = temp;}else if(op.compareTo(new String("BACK")) == 0){if(backward.IsEmpty() == true){flag = false;System.out.println("Ignored");}else{forward.Push(cur);cur = backward.Top();backward.Pop();}}else if(op.compareTo(new String("FORWARD")) == 0){if(forward.IsEmpty() == true){flag = false;System.out.println("Ignored");}else{backward.Push(cur);cur = forward.Top();forward.Pop();}}if(flag)System.out.println(cur);}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.