| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:这题的报错我都无语!!!郁闷
取消只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:8 
这题的报错我都无语!!!郁闷
先建立一若干结点(结点数据域的值由键盘输入)构成的单链表,再实现下列操作:(每一功能用一函数实现)
11·
从链表的第i个结点开始连删len个结点,若不够个len结点,则从第i个结点开始删到表尾。
22·
在第i个结点之后插入一值为x的结点,并返回成功与否的标志。

以上是题目要求:(不过我的的程序就最后一个要求就是返回成功标志的没完成!望谁能给解决一下哈)
下面是我的程序
程序代码:
[color=#0000FF]#include<stdio.h>
#include<stdlib.h>
#define N  5  /*控制结点数*/
struct stu
{
    int num;/*学号*/
    struct stu *next;
}stu[N];
void main()
{
    struct stu *head;/*结点声明*/
    struct stu *creat(struct stu *head);/*函数声明建立链表*/
    struct stu *delet(struct stu *head,int i,int len);/*函数声明在i结点开始连删len个结点*/
    struct stu *input(struct stu *head,int i,int x);/*函数声明在第i个结点后插入值为x的节点*/
    void print(struct stu *head);/*函数声明输出链表数据*/
    int i,len,x;
        printf("请输入相关数据:\n");
    while(1)
    {
        printf("请输入i和len:\n");
        scanf("%d%d",&i,&len);
        if(i>0&&len>0&&i<=N)
            break;
        else
            continue;
    }
    printf("请输入要插入的结点数据x:\n");
        scanf("%d",&x);
    head=creat(head);/*函数掉用建立链表*/
    print(head);/*函数调用输出初始链表*/
    head=delet(head,i,len);/*函数调用输出删除len个结点后的链表*/
    print(head);/*输出删除len个结点后的链表*/
    head=input(head,i,x);/*函数调用输出链表*/
    print(head);/*函数调用输出插入x结点后的链表*/
}
/*-------------函数定义建立链表------------*/
struct stu *creat(struct stu *head)

 {
     struct stu *thisp,*newp;
    head=NULL;/*置空表*/
    int i;
    printf("输入四个学生的信息:\n");/*建立链表*/
    for(i=0;i<N;i++)
    {
        newp=(struct stu *)malloc(sizeof(stu));
        if(head==NULL)
            head=newp;
        else
        {
            thisp=head;
            while(thisp->next!=NULL)
                thisp=thisp->next;
            thisp->next=newp;/*指向新开辟的节点*/
        }
        thisp=newp;
        printf("学号为%d的学生的信息\n",i+1);
                printf("学号:\n");
        scanf("%d",&thisp->num);
        thisp->next=NULL;
    }
    return head;

 }
/*-----------函数定义删除题目要求的结点---------*/
struct stu *delet(struct stu *head,int i,int len)
{
    struct stu *pointer,*ward,*back;/*结点声明*/
    pointer=head;/*设为头结点*/
    int j,count=0;/*count为计数器记录删除的结点个数*/

        while(j=0;j<i;j++)/*此循环为找到开始删除的那个结点*/
        {
            back=pointer;/*pointer结点的前一结点*/
            pointer=pointer->next;
        }
        ward=pointer->next;/*从ward结点开始删除*/
        if(ward->next==NULL)/*如果back结点是最后一个结点*/
        {
            pointer->next=NULL;/*上一个结点设为尾结点*/
            free(ward);/*释放back结点*/
        }
        else if(pointer->next=NULL)/*如果要从最后一个结点开始删*/
        {
            back->next=NULL;/*上一节点为尾结点*/
            free(pointer);
        }
        else
        {
           
                if(N-i<=len)/*如果从第i个结点开始计算剩余的结点数目小于len*/
                {
                    pointer->next=NULL;
                    while(ward->next!=NULL)/*释放后面的结点*/
                    {
                        ward=ward->next;
                        free(ward);
                    }
                    free(ward);/*释放最后一个结点*/
                }
                else
                {
                    while(1)
                    {
                           ward=ward->next;
                          free(ward);
                          count++;
                          if(len==count)/*当按要求删完后*/
                          {
                             pointer->next=back;
                             break;
                          }
                    }
                }
       
        }
        return head;

}
/*-------------函数定义插入结点------------*/
struct stu *input(struct stu *head,int i,int x)
{
   
    struct stu *pointer,*back,*ward,*nextd;/*结点声明*/
    int j;
    ward=(struct stu *)malloc(sizeof(stu));/*开辟新结点*/
    ward->num=x;/*把x赋值给新开辟的结点*/
    while(j=0;j<i;j++)  /*找到要插入的前一位置*/
    {
        back=pointer;
        pointer=pointer->next;
    }
    if(pointer->next=NULL)/*插在表尾*/
    {
        pointer->next=ward;
        ward->next=NULL;
    }
    else/*插在pointer和nextd结点之间*/
    {
        nextd=pointer->next;
        ward->next=nextd;
        pointer->next=ward;
    }
    return head;
}
/*---------------输出链表---------------*/
void print(struct stu *head)
{
    struct stu *pointer;/*结点声明*/
    pointer=head;/*设为头结点*/
    while(pointer!=NULL)
    {
        printf("%d",pointer->num);
        pointer=pointer->next;
        printf("\n");
    }
}
    

    


               
       
            



   
一下是快让我疯掉的报错!真郁闷
程序代码:
--------------------Configuration: 函数链表 - Win32 Debug--------------------
Compiling...
函数链表.cpp
F:\c\函数链表.cpp(70) : error C2143: syntax error : missing ')' before ';'
F:\c\函数链表.cpp(70) : warning C4552: '<' : operator has no effect; expected operator with side-effect
F:\c\函数链表.cpp(70) : error C2059: syntax error : ')'
F:\c\函数链表.cpp(71) : error C2143: syntax error : missing ';' before '{'
F:\c\函数链表.cpp(126) : error C2143: syntax error : missing ')' before ';'
F:\c\函数链表.cpp(126) : warning C4552: '<' : operator has no effect; expected operator with side-effect
F:\c\函数链表.cpp(126) : error C2059: syntax error : ')'
F:\c\函数链表.cpp(127) : error C2143: syntax error : missing ';' before '{'
执行 cl.exe 时出错.

函数链表.obj - 1 error(s), 0 warning(s)
麻烦给看一下哈!我的结贴率可是信得过哈!还有注释还很好啊!麻烦给看看函数真题有没有毛病!还有就是我有一点疑惑的地方就是如果删除和插入调用的先后顺序不同!那么结果就不同了啊!不知道怎么解决
[/color]
搜索更多相关主题的帖子: 键盘 
2010-07-06 21:19
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 2楼 do8do8do8
谢谢您哈!我试着分析一下
2010-07-08 08:42
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
这才发现自己犯了个低级错误!while当for用了!硬是没发现!郁闷死啦!丢人!不过现在又出现死循环 了!现在正在试着改
2010-07-08 16:06
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
好来!我这就下班!马上回宿舍就发上来哈!谢谢您了!我自己顺便也在改改
2010-07-08 19:44
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N  5  /*控制结点数*/
struct stu
{
    int num;/*学号*/
    struct stu *next;
}stu[N];
void main()
{
    struct stu *head;/*结点声明*/
    struct stu *creat(struct stu *head);/*函数声明建立链表*/
    struct stu *delet(struct stu *head,int i,int len);/*函数声明在i结点开始连删len个结点*/
    struct stu *input(struct stu *head,int i,int x);/*函数声明在第i个结点后插入值为x的节点*/
    void print(struct stu *head);/*函数声明输出链表数据*/
    int i,len,x;
        printf("请输入相关数据:\n");
    while(1)
    {
        printf("请输入i和len:\n");
        scanf("%d%d",&i,&len);
        if(i>0&&len>0&&i<=N)
            break;
        else
            continue;
    }
    printf("请输入要插入的结点数据x:\n");
        scanf("%d",&x);
    head=creat(head);/*函数掉用建立链表*/
    print(head);/*函数调用输出初始链表*/
    head=delet(head,i,len);/*函数调用输出删除len个结点后的链表*/
    print(head);/*输出删除len个结点后的链表*/
    head=input(head,i,x);/*函数调用输出链表*/
    print(head);/*函数调用输出插入x结点后的链表*/
}
/*-------------函数定义建立链表------------*/
struct stu *creat(struct stu *head)

 {
     struct stu *thisp,*newp;
    head=NULL;/*置空表*/
    int i;
    printf("输入四个学生的信息:\n");/*建立链表*/
    for(i=0;i<N;i++)
    {
        newp=(struct stu *)malloc(sizeof(stu));
        if(head==NULL)
            head=newp;
        else
        {
            thisp=head;
            while(thisp->next!=NULL)
                thisp=thisp->next;
            thisp->next=newp;/*指向新开辟的节点*/
        }
        thisp=newp;
        printf("学号为%d的学生的信息\n",i+1);
                printf("学号:\n");
        scanf("%d",&thisp->num);
        thisp->next=NULL;
    }
    return head;

 }
/*-----------函数定义删除题目要求的结点---------*/
struct stu *delet(struct stu *head,int i,int len)
{
    struct stu *pointer,*ward,*back;/*结点声明*/
    pointer=head;/*设为头结点*/
    int j,count=0;/*count为计数器记录删除的结点个数*/

        for(j=0;j<i;j++)/*此循环为找到开始删除的那个结点*/
        {
            back=pointer;/*pointer结点的前一结点*/
            pointer=pointer->next;
        }
        ward=pointer->next;/*从ward结点开始删除*/
        if(ward->next==NULL)/*如果back结点是最后一个结点*/
        {
            pointer->next=NULL;/*上一个结点设为尾结点*/
            free(ward);/*释放ward结点*/
        }
        else if(pointer->next=NULL)/*如果要从最后一个结点开始删*/
        {
            back->next=NULL;/*上一节点为尾结点*/
            free(pointer);
        }
        else
        {
           
                if(N-i<=len)/*如果从第i个结点开始计算剩余的结点数目小于len*/
                {
                    pointer->next=NULL;
                    while(ward->next!=NULL)/*释放后面的结点*/
                    {
                        ward=ward->next;
                        free(ward);
                    }
                    free(ward);/*释放最后一个结点*/
                }
                else
                {
                    while(1)
                    {
                           ward=ward->next;
                          free(ward);
                          count++;
                          if(len==count)/*当按要求删完后*/
                          {
                             pointer->next=back;
                             break;
                          }
                    }
                }
       
        }
        return head;

}
/*-------------函数定义插入结点------------*/
struct stu *input(struct stu *head,int i,int x)
{
   
    struct stu *pointer,*back,*ward,*nextd;/*结点声明*/
    int j;
    ward=(struct stu *)malloc(sizeof(stu));/*开辟新结点*/
    ward->num=x;/*把x赋值给新开辟的结点*/
    for(j=0;j<i;j++)  /*找到要插入的前一位置*/
    {
        back=pointer;
        pointer=pointer->next;
    }
    if(pointer->next=NULL)/*插在表尾*/
    {
        pointer->next=ward;
        ward->next=NULL;
    }
    else/*插在pointer和nextd结点之间*/
    {
        nextd=pointer->next;
        ward->next=nextd;
        pointer->next=ward;
    }
    return head;
}
/*---------------输出链表---------------*/
void print(struct stu *head)
{
    struct stu *pointer;/*结点声明*/
    pointer=head;/*设为头结点*/
    while(pointer!=NULL)
    {
        printf("%d",pointer->num);
        pointer=pointer->next;
        printf("\n");
    }
}
    

    


               
       
            



   
还有待改进哈!
2010-07-08 20:02
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 7楼 zisefengye
我是按照题目要求来的啊!len代表在第i个结点后要删除的结点数啊
2010-07-08 20:03
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 10楼 sunyh1999
嘿嘿!好的!劳您费心了哈!我把那个死循环的问题解决了现在!现在还在修改中
2010-07-08 20:59
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
郁闷!为什么我输入的i=2时即我想从第2个结点开始删,结果反而删了第四个呢!!应该删了第三个才对啊
2010-07-09 15:34
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 13楼 sxwsxw
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N  5  /*控制结点数*/
struct stu
{
    int num;/*学号*/
    struct stu *next;
}stu[N];
void main()
{
    struct stu *head;/*结点声明*/
    struct stu *creat(struct stu *head);/*函数声明建立链表*/
    struct stu *delet(struct stu *head,int r,int len);/*函数声明在i结点开始连删len个结点*/
    struct stu *input(struct stu *head,int r,int x);/*函数声明在第i个结点后插入值为x的节点*/
    void print(struct stu *head);/*函数声明输出链表数据*/
    int r,len,x;
        printf("请输入相关数据:\n");
    while(1)
    {
        printf("请输入r和len:\n");
        scanf("%d%d",&r,&len);
        if(r>0&&len>0&&r<=N)
            break;
        else
            continue;
    }
    printf("请输入要插入的结点数据x:\n");
        scanf("%d",&x);
    head=creat(head);/*函数掉用建立链表*/
    printf("输出初始链表:\n");
    print(head);/*函数调用输出初始链表*/
    head=delet(head,r,len);/*函数调用输出删除len个结点后的链表*/
    printf("输出删除len个结点后的结点:\n");
    print(head);/*输出删除len个结点后的链表*/
    head=input(head,r,x);/*函数调用插入链表*/
    printf("输出插入结点后的链表:\n");
    print(head);/*函数调用输出插入x结点后的链表*/
}
/*-------------函数定义建立链表------------*/
struct stu *creat(struct stu *head)

 {
     struct stu *thisp,*newp;
    head=NULL;/*置空表*/
    int i;
    printf("输入四个学生的信息:\n");/*建立链表*/
    for(i=0;i<N;i++)
    {
        newp=(struct stu *)malloc(sizeof(stu));
        if(head==NULL)
            head=newp;
        else
        {
            thisp=head;
            while(thisp->next!=NULL)
                thisp=thisp->next;
            thisp->next=newp;/*指向新开辟的节点*/
        }
        thisp=newp;
        printf("学号为%d的学生的信息\n",i+1);
                printf("学号:\n");
        scanf("%d",&thisp->num);
        thisp->next=NULL;
    }
    return head;

 }
/*-----------函数定义删除题目要求的结点---------*/
struct stu *delet(struct stu *head,int r,int len)
{
    struct stu *pointer,*ward,*back,*zh;/*结点声明*/
    pointer=head;/*设为头结点*/
    int j,count=0;/*count为计数器记录删除的结点个数*/

        for(j=0;j<r;j++)/*此循环为找到开始删除的那个结点*/
        {
            back=pointer;/*pointer结点的前一结点*/
            pointer=pointer->next;
        }
         if(pointer->next==NULL)/*如果出循环时就只想了链表尾*/
             return head;
         else
             ward=pointer->next;/*从ward结点开始删除*/
             if(ward->next==NULL)/*如果ward结点是最后一个结点*/
             {
                 pointer->next=ward->next;/*上一个结点设为尾结点*/
              free(ward);/*释放ward结点*/
             }
               if(N-r<=len)/*如果从第i个结点开始计算剩余的结点数目小于len*/
                {
                    while(ward->next!=NULL)/*释放后面的所有结点*/
                    {
                        ward=ward->next;
                        free(ward);
                    }
                   
                    pointer->next=ward->next;
                    free(ward);/*释放最后一个结点*/
                }
                else/*如果要删的len个数小于剩下的结点数*/
                {
                    while(1)
                    {
                        zh=ward;

                           ward=ward->next;
                           pointer->next=ward->next;
                          free(zh);
                         
                          count++;
                          if(len==count)/*当按要求删完后*/
                          {
                           
                             break;
                          }
                    }
                }
        

        return head;

}
/*-------------函数定义插入结点------------*/
struct stu *input(struct stu *head,int r,int x)
{
   
    struct stu *pointer,*back,*ward,*nextd;/*结点声明*/
    int j;
    ward=(struct stu *)malloc(sizeof(stu));/*开辟新结点*/
    ward->num=x;/*把x赋值给新开辟的结点*/
    for(j=0;j<r;j++)  /*找到要插入的前一位置*/
    {
        back=pointer;
        pointer=pointer->next;
    }
    if(pointer->next=NULL)/*插在表尾*/
    {
        ward->next=pointer->next;
        pointer->next=ward;
    }
    else/*插在pointer和nextd结点之间*/
    {
        nextd=pointer->next;
        ward->next=nextd;
        pointer->next=ward;
    }
    return head;
}

/*---------------输出链表---------------*/
void print(struct stu *head)
{
    struct stu *pointer;/*结点声明*/
    pointer=head;/*设为头结点*/
    while(pointer!=NULL)
    {
        printf("%2d",pointer->num);
        pointer=pointer->next;
       
    }
    printf("\n");
}
    

    


               
       
            



   
这是我改后的代码!不过还是不行!我都技穷了啊!
2010-07-09 16:11
快速回复:这题的报错我都无语!!!郁闷
数据加载中...
 
   



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

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