| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:这题的报错我都无语!!!郁闷
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:14 
这题的报错我都无语!!!郁闷
先建立一若干结点(结点数据域的值由键盘输入)构成的单链表,再实现下列操作:(每一功能用一函数实现)
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
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:15 
其中之一:
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;
        }
---------------------------------------
这个for循环结束后,pointer指向了要删除数据的起始位,back指向pointerd的前一位(邻左)
-----------------------------------------
        ward=pointer->next;/*从ward结点开始删除*/---------------这个ward指向在pointer的(邻右).
        if(ward->next==NULL)/*如果back结点是最后一个结点*/------------------考察ward是否为最后一个数据
        {
            pointer->next=NULL;/*上一个结点设为尾结点*/
            free(ward);/*释放back结点*/
        }
        else if(pointer->next=NULL)/*如果要从最后一个结点开始删*/
------------------------------------------------
          ward不为空了,怎么pointer就为空?ward在pointer的后面.
------------------------------------------------
        {
            back->next=NULL;/*上一节点为尾结点*/
            free(pointer);
        }
        else
        {

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-07 16:10
遮天云
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
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:5 
遮天云,请你把你现在改的代码给我看看,我试试能不能帮你

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-08 18:59
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
好来!我这就下班!马上回宿舍就发上来哈!谢谢您了!我自己顺便也在改改
2010-07-08 19:44
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:10 
楼主的代码我看了不是很明白,在建立链表前,为何要输入len,i又代表了什么(是学生人数么)。关于死循环,那是因为你的scanf写的有问题。
while(1)
{
      printf("请输入i和 len:\n");
      scanf("%d%d",&i,&len);
      if(i>0&&len>0&&i<=N)
          break;
      else
          continue;
}是否能改成
printf("请输入i\n");
while(scanf("%d",&i))
{
    if(i <= N)
        break;
    printf("请输入i\n");
}
2010-07-08 19:46
遮天云
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
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
遮天云,待会我要睡觉了,我明天帮你看哦

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-08 20:58
快速回复:这题的报错我都无语!!!郁闷
数据加载中...
 
   



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

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