题目大意:
标准网页浏览器支持在最近浏览过的网页中前进和后退,实现该特征的一种方法就是用两个栈来记录前面和后面的浏览过的网页。
现需要编程实现该功能,并且能支持以下四种命令:
BACK:将当前网页压入“前栈”,并从“后栈”栈顶弹出一个网页作为当前网页,如果在弹之前“后栈”是空的,则该命令将被忽视;
FORWARD:将当前网页压入“后栈”,并从“前栈”栈顶弹出一个网页作为当前网页,如果在弹之前“后栈”是空的,则该命令将被忽视;
VISIT:将当前网页压入“后栈”,将命令中要访问的网页作为当前网页并将“前栈”清空;
QUIT:退出浏览器
其中,网页数最多为100个(不包括默认的首页),网址所包含的字符最多为70个。
注释代码:
/*
* Problem ID : POJ 1028 Web Navigation
* Author : Lirx.t.Una
* Language : C
* Run Time : 0 ms
* Run Memory : 176 KB
*/
#include <stdio.h>
//maximum size of stack,存放URL栈的最大容量
//其中第一个(下标为0的)存放题中默认的acm.org
//除此之外最多还有100个,因此为100 + 1个
#define MAXSTACKSIZE 101
//maximum length of URL,URL的最大长度(70 + 1),最后一位放'\0'
#define MAXURLLEN 71
//maximum length of command,向服务器请求的命令的最大长度
//最长的是FORWARD,7位,再加一位'\0',总共为8位
#define MAXCMDLEN 8
char stk[MAXSTACKSIZE][MAXURLLEN] = { "http://www.acm.org/" };//stack,URL栈,头个存放默认的acm.org
char cmd[MAXCMDLEN];//command,服务器请求命令
int
main() {
int cur;//栈的当前位置指针
int top;//栈的栈顶位置指针
//初始化
top = 0;
cur = 0;
while ( scanf("%s", cmd), *cmd != 'Q' )//若为QUIT,则退出测例结束程序
switch ( *cmd ) {
case 'V' ://若为VISIT
//将当前位置之后的URL删去后加visit的URL压栈
scanf("%s", stk[++cur]);//先将visit的URL压栈
top = cur;//更新栈顶指针将后面的URL删除
puts(stk[cur]);
break;
case 'B' ://若为BACK
if ( !cur ) {//若当前页为首页则访问失败
puts("Ignored");
break;
}
puts(stk[--cur]);
break;
default ://若为FORWARD
if ( cur == top ) {//若当前页为末页页访问失败
puts("Ignored");
break;
}
puts(stk[++cur]);
break;
}
return 0;
}
无注释代码:
#include <stdio.h>
#define MAXSTACKSIZE 101
#define MAXURLLEN 71
#define MAXCMDLEN 8
char stk[MAXSTACKSIZE][MAXURLLEN] = { "http://www.acm.org/" };
char cmd[MAXCMDLEN];
int
main() {
int cur;
int top;
top = 0;
cur = 0;
while ( scanf("%s", cmd), *cmd != 'Q' )
switch ( *cmd ) {
case 'V' :
scanf("%s", stk[++cur]);
top = cur;
puts(stk[cur]);
break;
case 'B' :
if ( !cur ) {
puts("Ignored");
break;
}
puts(stk[--cur]);
break;
default :
if ( cur == top ) {
puts("Ignored");
break;
}
puts(stk[++cur]);
break;
}
return 0;
}
单词解释:
navigation:n, 导航,航行
browswer:n, 浏览器
feature:n, 特征
backward/forward:adv/adj, 向后/向前
implement:vt, 实施,执行
keep track of:vt, 记录,与...保持联系
specify:vt, 指定,详细说明
empty:vt, 清空
assume that:假设....
initial:adj, 初始的
load the web page at 网址:加载网页在...(网址)
sequence:n, 序列
keyword:n, 关键字
whitespace:n, 空白,空格
instance:n, 实例,例子
execute:vt, 执行