| ||||||||||
| 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 | |||||||||
为什么总是Output Limit Exceeded,哪位能抽时间运行一下看看!代码如下……(GCC)#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct s {
char **e;
int top;
int base;
} stack_t;
char *current;
void init_stack(stack_t *s, int size) {
if (!(s->e = (char**) malloc(sizeof (char*) *(size + 1)))) {
return;
}
s->base = size;
s->top = size;
}
int is_empty(stack_t *s) {
return (s->base <= s->top) ? 1 : 0;
}
void push(stack_t *s, char *elem) {
if (s->top == 0) {
return;
}
(s->e)[s->top] = elem;
(s->top)--;
}
void pop(stack_t *s, char **elem) {
if (is_empty(s)) {
return;
}
(s->top)++;
*elem = (s->e)[s->top];
}
void visit(stack_t *sv, stack_t *sb, char *new){
push(sv, current);
current = new;
printf("%s",new);
sb->top = sb->base;//visit以后应该清空back栈,即forward不可用
}
void back(stack_t *sv, stack_t *sb){
if(is_empty(sv)){
printf("Ignored\n");
return;
}
push(sb, current);
pop(sv, ¤t);
printf("%s",current);
}
void forward(stack_t *sv, stack_t *sb){
if(is_empty(sb)){
printf("Ignored\n");
return;
}
push(sv, current);
pop(sb, ¤t);
printf("%s",current);
}
int main(void) {
stack_t visited, backed;
char *url, \
*command = (char*)malloc(100), \
*initial = "http://www.acm.org/\n";
int len;
current = initial;
init_stack(&visited, 100);
init_stack(&backed, 100);
fgets(command, 100, stdin);rewind(stdin);
while(1){
switch(command[0]){
case 'V':
len = strlen(command+6);
url = (char*)malloc(len+1);
strcpy(url,command+6);
visit(&visited, &backed, url);
break;
case 'B':
back(&visited, &backed);
break;
case 'F':
forward(&visited, &backed);
break;
case 'Q':
goto f;
}
fgets(command, 100, stdin);rewind(stdin);
}
f:
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator