数据结构的几道题,有点难,能做出一道就采纳,可以加财富值。谢谢了

 我来答
百度网友83cdc1c
推荐于2016-08-15 · TA获得超过5788个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:816万
展开全部

给你做一题吧。

11.2.5 浏览器那题

#include <stdio.h>

#define STACK_SIZE  100
#define URL_SIZE    100
typedef struct sitem
{
    char url[URL_SIZE];
}URL_I;
typedef struct url_stack
{
    URL_I urls[STACK_SIZE];
    URL_I *top;
}URL_S;
URL_S bw, fw;

void stack_init(URL_S *s)
{
    s->top = s->urls;
}

int stack_is_empty(URL_S *s)
{
    return s->top <= s->urls;
}

int stack_is_full(URL_S *s)
{
    return s->top >= s->urls + STACK_SIZE -1;
}

int stack_push(URL_S *s, URL_I *u)
{
    if(stack_is_full(s))
        return -1;
    strcpy((++s->top)->url, u->url);
    return 0;
}

int stack_pop(URL_S *s, URL_I *u)
{
    if(stack_is_empty(s))
        return -1;
    strcpy(u->url, (s->top--)->url);
    return 0;
}

int main(void)
{
    char cmd[20];
    URL_I u;
    int f;

    stack_init(&bw);
    stack_init(&fw);
    u.url[0] = '\0';

    while(1)
    {
        gets(cmd);
        f = 1;
        if(strncmp(cmd, "VISIT ", 6) == 0)
        {
            if(strlen(cmd) < 7)
            {
                printf("Ignored\n");
                continue;
            }
            if(strlen(u.url) > 0)
            {
                if(stack_push(&bw, &u) != 0)
                {
                    printf("BACK FULL STACK!\n");
                    printf("Ignored\n");
                    continue;
                }
            }
            strcpy(u.url, cmd + 6);
            stack_init(&fw);
        }
        else if(strcmp(cmd, "BACK") == 0)
        {
            if(stack_push(&fw, &u) != 0)
            {
                printf("FORWARD FULL STACK!\n");
                printf("Ignored\n");
                continue;
            }
            if(stack_pop(&bw, &u) != 0)
            {
                printf("Ignored\n");
                stack_pop(&fw, &u);
                f = 0;
            }
        }
        else if(strcmp(cmd, "FORWARD") == 0)
        {
            if(stack_push(&bw, &u) != 0)
            {
                printf("BACK FULL STACK!\n");
                printf("Ignored\n");
                continue;
            }
            if(stack_pop(&fw, &u) != 0)
            {
                printf("Ignored\n");
                stack_pop(&bw, &u);
                f = 0;
            }
        }
        else if(strcmp(cmd, "QUIT") == 0)
        {
            break;
        }
        else
        {
            printf("Wrong cmd, Ignored\n");
            f = 0;
        }
        if(f)
            printf("%s\n", u.url);
    }

    return 0;
}

其实这一题用一个栈就能实现,不过还是按照题意给你做了一下。

更多追问追答
追问

可以写一点注释吗,我看不懂,谢谢了

还有请问这是什么原因呢

追答

写了注释超字数了,给你发附件。

那只是个警告,提示strcpy没有strcpy_s安全,你也可以用后者。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式