POJ 1028 Web Navigation

题目大意:

         标准网页浏览器支持在最近浏览过的网页中前进和后退,实现该特征的一种方法就是用两个栈来记录前面和后面的浏览过的网页。

         现需要编程实现该功能,并且能支持以下四种命令:

                 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, 执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值