考研论坛

 
查看: 4646|回复: 11
打印 上一主题 下一主题

一道程序题求解

[复制链接]

4

主题

71

帖子

422

积分

一般战友

Rank: 2

精华
0
威望
0
K币
422 元
注册时间
2014-4-13
跳转到指定楼层
楼主
发表于 2016-10-21 09:13 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这里printf是c语言的函数吧?能直接传整型当参数?能的话输出什么。。我下vc++是跑不了

来自Android客户端

    回复

    使用道具 举报

    2

    主题

    93

    帖子

    269

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    269 元
    注册时间
    2016-4-27
    沙发
    发表于 2016-10-21 22:13 | 只看该作者
    本帖最后由 UncleLoveLoli 于 2016-10-21 22:14 编辑


    能看到吗.
    回复

    使用道具 举报

    4

    主题

    71

    帖子

    422

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    422 元
    注册时间
    2014-4-13
    板凳
     楼主| 发表于 2016-10-22 09:18 来自手机 | 只看该作者
    UncleLoveLoli 发表于 2016-10-21 22:13
    能看到吗.

    嗯嗯,谢谢,不知道怎么现在脑子越来越不灵活了(ಥ_ಥ)

    来自Android客户端

    回复

    使用道具 举报

    10

    主题

    1029

    帖子

    4798

    积分

    高级战友

    Rank: 4

    精华
    1
    威望
    130
    K币
    4668 元
    注册时间
    2015-3-7
    地板
    发表于 2016-10-24 11:23 | 只看该作者
    你是把伪码当C语言代码了吧,它的printf只是表示将他们输出而已。别拘泥与格式。
    回复

    使用道具 举报

    4

    主题

    71

    帖子

    422

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    422 元
    注册时间
    2014-4-13
    5
     楼主| 发表于 2016-10-24 19:27 | 只看该作者
    我要研了 发表于 2016-10-24 11:23
    你是把伪码当C语言代码了吧,它的printf只是表示将他们输出而已。别拘泥与格式。 ...

    嗯嗯,主要这代码也太伪了~之前见的printf都是写具体的=。=
    回复

    使用道具 举报

    4

    主题

    71

    帖子

    422

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    422 元
    注册时间
    2014-4-13
    6
     楼主| 发表于 2016-10-30 17:30 来自手机 | 只看该作者
    UncleLoveLoli 发表于 2016-10-21 22:13
    能看到吗.

    能再看看这题吗

    来自Android客户端

    回复

    使用道具 举报

    4

    主题

    71

    帖子

    422

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    422 元
    注册时间
    2014-4-13
    7
     楼主| 发表于 2016-10-30 17:31 来自手机 | 只看该作者
    我要研了 发表于 2016-10-24 11:23
    你是把伪码当C语言代码了吧,它的printf只是表示将他们输出而已。别拘泥与格式。 ...

    能再帮忙看下这题吗

    来自Android客户端

    回复

    使用道具 举报

    2

    主题

    93

    帖子

    269

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    269 元
    注册时间
    2016-4-27
    8
    发表于 2016-11-7 11:31 | 只看该作者
    感冒了,才看到.



    代码如下:
    #include <stdio.h>
    #include <stdlib.h>

    typedef int ElemType;

    typedef struct LNode
    {
            ElemType data;
            struct LNode *next;

    }LNode;

    LNode* LNodeCreate(int len)//创建长度为n的循环链表,带头结点,头指针.
    {

            LNode* headp = NULL;//创建头指针
            headp = (LNode *)malloc(sizeof(LNode));//创建头结点.
            headp->data = 0;
            printf("头结点data = 0\n");
            int data;

            LNode *p = NULL;
            LNode *q = NULL;

            p = headp;
            q = headp;

            for (int i = 1; i < len; i++)//长度是n,从(0,n-1);
            {
                    printf("请输入第%d链表的值: ", i);
                    scanf("%d", &data);

                    q = (LNode *)malloc(sizeof(LNode));
                    q->data = data;
                    q->next = NULL;

                    p->next = q;
                    p = q;

           
            }
            q->next = headp;
            q = headp;
            p = headp;
            return headp;
    }


    // 遍历循环链表.

    void print(LNode* p)
    {
           
            LNode* p1 = p;
            while (p1->next != p)
            {
                    printf("%d ", p1->data);
                    p1 = p1->next;
            }
            printf("%d ", p1->data);
            printf("\n");

    }



    void Split(LNode *s, LNode *q)
    {

            LNode *p = NULL;
            p = s;

            while (p->next != q)
            {
                    printf("%d ", p->data);
                    p = p->next;

            }
            printf("%d ", p->data);
            printf("\n");
            p->next = s;
    }


    void AtoBB(LNode *pa, LNode *pb)
    {
            //pa和pb分别指向单循环链表(结点数>1)中的两个结点.

            Split(pa, pb);

            Split(pb, pa);
    }


    int main()
    {
            printf("请输入循环链表的长度:");
            int length = 0;
            scanf("%d", &length);
            LNode* head = LNodeCreate(length);
           
             print(head);//遍历循环链表

            int pa_num;
            int pb_num;

            LNode *pa = NULL;
            LNode *pb = NULL;
            printf("pa 指向单循环链表的第几个结点(1≤num≤%d): ", length);
            scanf("%d", &pa_num);
            LNode* p1 = NULL;
            p1 = head;
            for (int i = 0; i < pa_num-1 ; i++)
            {
                    p1 = p1->next;
            }
            pa = p1;
           
            printf("pb指向单循环链表的第几个结点(1≤num≤%d): ", length);
            scanf("%d", &pb_num);
            LNode* p2 = head;
            for (int i = 0; i < pb_num-1 ; i++)
            {
                    p2 = p2->next;
            }
            pb = p2;
           
            AtoBB(pa, pb);
            free(head);       
            return 0;

    }
    回复

    使用道具 举报

    2

    主题

    93

    帖子

    269

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    269 元
    注册时间
    2016-4-27
    9
    发表于 2016-11-7 11:32 | 只看该作者

    回复

    使用道具 举报

    4

    主题

    71

    帖子

    422

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    0
    K币
    422 元
    注册时间
    2014-4-13
    10
     楼主| 发表于 2016-11-7 22:16 | 只看该作者

    谢谢大神,祝大神感冒快点好,今年一定考上哈~果然这题是少一个p=s, 意思就是我可以简述为split(a,b)函数主要把a结点到b结点前一个结点的所有结点都抽出来,AtoBB 就是调用两次这个算法,第一次已经抽出a,b之间的链,第二次再把剩余的链抽出?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    本版积分规则   

    关闭

    您还剩5次免费下载资料的机会哦~

    扫描二维码下载资料

    使用手机端考研帮,进入扫一扫
    在“我”中打开扫一扫,
    扫描二维码下载资料

    关于我们|商务合作|小黑屋|手机版|联系我们|服务条款|隐私保护|帮学堂| 网站地图|院校地图|漏洞提交|考研帮

    GMT+8, 2025-12-5 14:30 , Processed in 0.092693 second(s), Total 10, Slave 10(Usage:7M, Links:[2]1,1_1) queries , Redis On.

    Powered by Discuz!

    © 2001-2017 考研 Inc.

    快速回复 返回顶部 返回列表
    × 关闭