比较水的题目,一次就AC了。 用了两个链栈去实现。不是最优的方法吧。 代码如下: #include <stdio.h> #include <malloc.h> #include <string.h> #define NULL 0 typedef struct bnode{ char arr[75]; struct bnode * next; } bSnode, *bstack; typedef struct fnode{ char arr[75]; struct fnode * next; } fSnode, *fstack; int main() { char input[8], url[71]; int length; bstack s, btop, p; fstack t, ftop, q; s = (bstack)malloc(sizeof(bSnode)); strcpy(s->arr, "http://www.acm.org/"); s->next = NULL; btop = s; t = (fstack)malloc(sizeof(fSnode)); strcpy(t->arr, ""); t->next = NULL; ftop = t; scanf("%s", &input); while(strcmp(input, "QUIT")) { switch(input[0]){ case 'V': scanf("%s", &url); p = (bstack)malloc(sizeof(bSnode)); strcpy(p->arr, url); p->next = btop; btop = p; //清空forword ftop->next = NULL; strcpy(ftop->arr, ""); printf("%s/n", btop->arr); break; case 'B': if (btop->next != NULL){ //将backstack栈顶元素压入forstack q = (fstack)malloc(sizeof(fSnode)); strcpy(q->arr, btop->arr); q->next = ftop; ftop = q; btop = btop->next; printf("%s/n", btop->arr); break; } printf("Ignored/n"); break; case 'F': if (ftop->next != NULL){ p = (bstack)malloc(sizeof(bSnode)); strcpy(p->arr, ftop->arr); p->next = btop; btop = p; ftop = ftop->next; printf("%s/n", btop->arr); break; } printf("Ignored/n"); break; } scanf("%s", &input); } return 0; }