| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
双向链表就可以轻松实现,这题就是纯链表操作// 1028 Web Navigation.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct Node
{
string site;
Node* pre;
Node* next;
};
void Insert( Node* &cur, Node* &b, Node* &f, const string site )
{
// 新建节点
Node* s = new Node();
s->site = site;
s->pre = cur;
s->next = NULL;
// 连
cur->next = s;
b = cur;
cur = s;
// 删除f之后所有节点
while( f )
{
Node* p = f->next;
delete f;
f = p;
}
}
bool Back( Node* &cur, Node* &b, Node* &f )
{
if( b )
{
f = cur;
cur = b;
b = b->pre;
return true;
}
else
return false;
}
bool Forward( Node* &cur, Node* &b, Node* &f )
{
if( f )
{
b = cur;
cur = f;
f = f->next;
return true;
}
else
return false;
}
void ShowCur( const Node* cur, const bool flag )
{
if( flag )
cout << cur->site << endl;
else
cout << "Ignored\n";
}
void Dispose( Node* &cur, Node* &b, Node* &f )
{
while( b )
{
Node* p = b->pre;
delete b;
b = p;
}
delete cur;
cur = NULL;
while( f )
{
Node* p = f->next;
delete f;
f = p;
}
}
int main()
{
Node* cur = new Node();
cur->site = "http://www.acm.org/";
cur->pre = NULL;
cur->next = NULL;
Node* b = cur->pre;
Node* f = cur->next;
string cam, buff;
cin >> cam;
while( cam != "QUIT" )
{
char ch = getchar();
if( ch == ' ' )
{
cin >> buff;
}
bool flag = true;
if( cam == "VISIT" )
Insert( cur, b, f, buff );
else if( cam == "BACK" )
flag = Back( cur, b, f );
else if( cam == "FORWARD" )
flag = Forward( cur, b, f );
ShowCur( cur, flag );
cin >> cam;
}
// 释放链表
Dispose( cur, b, f );
system("pause");
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator