标题:NSB600"CL.EXE"已退出,代码为2
只看楼主
兔先生
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2018-11-9
结帖率:63.64%
已结贴  问题点数:10 回复次数:3 
NSB600"CL.EXE"已退出,代码为2
代码如下,是有关链表逆置的。
程序代码:
#include<stdio.h>
#include<stdlib.h>

struct node
{
    int data;
    struct node* next;
    struct node* prior;
};
void initlist(node* p);
void conversion(node* q);
void Printf(node* q);
int main()
{
     node* p;
    p = (struct  node*)malloc(sizeof(node));
    p->next = NULL;
    p->prior = NULL;
    p->data = -1;
    initlist(p);
    conversion(p);
    //Printf(p);
}
void initlist(node* q)
{
    int i;
    struct node* k,*p;
    p->data = 0;
    k= q->next;
    while (i<10)
    {
        struct node*s= (struct  node*)malloc(sizeof(node));
        s->data = p->data ++;
        s->prior = k;
        k->next = s;
        k = k->next;
        s->next = NULL;
    }
}
void conversion(node* q)
{
    int i;
    struct node* p,*s;
    s = q->next;
    while (s->data !=NULL)
    {
        if (s->next == NULL)
            p = s;
        s = s->next;
    }
    s = q->next;
    while (&s !=& p || s->prior != p)
    {
        s->data = s->data + p->data;
        p->data = s->data - p->data;
        s->data = s->data - p->data;
        p = p->prior;
        s = s->next;
    }
}

void Printf(node* q)
{
    struct node* p;
    p = q->next;
    while (p->next == NULL)
    {
        printf("%d", p->data);
        p = p->next;
    }
}

双击错误则转到另一个页面显示代码如下;

         <!-- Rest of the sources -->
429->    <CL Condition="'%(ClCompile.PrecompiledHeader)' != 'Create' and '%(ClCompile.ExcludedFromBuild)'!='true' and '%()' == '' and @(ClCompile) != ''"
         BuildingInIDE                      ="$(BuildingInsideVisualStudio)"
         Sources                            ="@(ClComp
有没有大佬知道这是哪方面的错误??
搜索更多相关主题的帖子: void struct next node data 
2019-09-30 15:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
先解决掉所有的编译错误和警告再说
void initlist(node* q)
{
    int i;
    struct node* k,*p;
    p->data = 0;
    k= q->next;
    while (i<10)
warning C4700: uninitialized local variable 'p' used
warning C4700: uninitialized local variable 'i' used

2019-09-30 15:43
兔先生
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2018-11-9
得分:0 
回复 2楼 rjsp
像这种双向链表逆置采用两头交换值并向中间移动的方法可以实现吗?;
判断已经交换完全的条件是什么?;
2019-09-30 18:54
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:5 
回复 3楼 兔先生
感觉问题很多啊
程序代码:
#include<stdio.h>
#include<stdlib.h>

struct node
{
    int data;
    struct node* next;
    struct node* prior;
};
void initlist(node* p);
void conversion(node* q);
void Printf(node* q);
int main()
{
     node* p;
    p = (struct  node*)malloc(sizeof(node));
    p->next = NULL;
    p->prior = NULL;
    p->data = -1;
    initlist(p);
    conversion(p);
    //Printf(p);
}
void initlist(node* q)//运行完这个初始化函数,回到main()里面的q,q->next=NULL,q->data=-1,q->prior=NULL   ,这个函数根本就没有起任何作用
{
    int i;
    struct node* k,*p;//程序运行到这里只是声明了两个指针变量k和p,并未初始化。
    p->data = 0;     //在没有给p指针赋值的情况下,p->data是个莫名其妙的东西。所以程序运行之前报error,运行之后就直接狗带了
    k= q->next;      //q->next 在main函数里被你初始化为NULL,那么这里为什么不直接k=NULL  ?
    while (i<10)
    {
        struct node*s= (struct  node*)malloc(sizeof(node));
        s->data = p->data ++;
        s->prior = k;
        k->next = s;      //k在while循环之外被定义为NULL了,那么这里的k->next  也是不可取的。NULL->next  ,NULL->data   ,NULL->prior  都是不对的,程序运行时都要狗带的
        k = k->next;
        s->next = NULL;
    }
}


void initlist2(node* q)   //我不清楚你想要的链表初始化效果怎么样,就照最简白的写了一个,希望你能理解其含义,改写成自己需要的
{
for(int i =0;i<10;i++){
q->next=(struct node*)malloc(sizeof(node));
q->next->data=i;
q->next->prior=q;
q=q->next;
}
q->next=NULL;//最后一个指针的NEXT=NULL
}
}
void conversion(node* q)//这部分就不看了。涉及到指针的代码测试,你可以试着在脑子里模拟程序的运行,去看看每一步的运行结果是否和预期的一致。可以在一些你想不透的地方加printf(),把变量输出看看验证一下你的设想
{
    int i;
    struct node* p,*s;
    s = q->next;
    while (s->data !=NULL)
    {
        if (s->next == NULL)
            p = s;
        s = s->next;
    }
    s = q->next;
    while (&s !=& p || s->prior != p)
    {
        s->data = s->data + p->data;
        p->data = s->data - p->data;
        s->data = s->data - p->data;
        p = p->prior;
        s = s->next;
    }
}

void Printf(node* q)
{
    struct node* p;
    p = q->next;
    while (p->next == NULL)
    {
        printf("%d", p->data);
        p = p->next;
    }
}

至于你提到的“逆置双向链”要从两头向中间同时经行互换,可以做,但没必要。因为你还是要对每一个节点执行一次调整次序是0123456789  还是0918273645.对总的程序运行时间步奏没有影响。反而需要花更大的精力去判断哪一个节点是中间节点,得不偿失

φ(゜▽゜*)♪
2019-10-02 18:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497082-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.268599 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved