| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:这题的报错我都无语!!!郁闷
只看楼主 加入收藏
遮天云
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
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
收藏
得分:10 
/*-----------函数定义删除题目要求的结点---------*/
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;

}
2010-07-09 16:03
遮天云
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
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
收藏
得分:0 
回复 14楼 遮天云
#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;int i;
    head=NULL;/*置空表*/

    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;/*结点声明*/ int j,count=0;
    pointer=head;/*设为头结点*/
   /*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");
}
我运行了,没问题。
你的问题是:一定要在函数中先定义变量再有执行语句,在支持使用变量时再定义的编译器里,你的程序就直接可以用,你用的不是VC,可能是TC吧
2010-07-29 11:56
快速回复:这题的报错我都无语!!!郁闷
数据加载中...
 
   



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

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