CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

这个程序,我不会改,谁帮帮俺

楼主gsp396(火烧耳朵)2004-09-03 19:11:49 在 C/C++ / C语言 提问

#include<stdio.h>  
  #include<stdlib.h>  
  typedef   struct   mylist  
  {  
      int   data;  
      struct   mylist   *next;  
  }mylist;  
   
  mylist   *   insert(int   d,   mylist   *head)/*建立链表就是一个插入数据的过程   */  
  {  
      mylist   *p,*q,*r;  
      p   =(struct   mylist   *)   malloc(sizeof(struct   mylist));  
      p->data   =   d;  
      p->next   =NULL;  
      if(head   ==NULL)  
          return   p;  
        q   =   head;  
      if(q->data   <   d)  
          p->next   =   q;  
      return   p;  
      r=   q;  
      q   =   q->next;  
      while(q   &&   q->data   <   d)  
      {  
            r   =   q;  
            q   =   q->next;  
      }  
      r   ->next   =   p;  
      p   ->next   =   q;  
      return   head;  
  }  
   
  mylist   *del(mylist   *head)  
  {  
      mylist   *q,   *r;  
      int   d;  
      printf("del   data:");  
      scanf(&d,"%d");  
   
      q   =   head;  
      r   =   q->next;  
      if(q->data   ==   d)  
      {  
            free(q)   ;  
            return   r;  
      }  
      while(   r->data   !=   d   &&   r)  
      {  
            q   =   r;  
            r   =   r->next;  
      }  
      if(r   ==   NULL)   return   head;  
      q->next   =   r->next;  
      free(r);  
      return   head;  
  }  
   
  mylist   *join(mylist   *p,mylist   *q)  
  {  
        mylist   *r;  
        while(p)/*因为插入过程会排序,所以可以直接插入数据*/  
        {  
            r=insert(p->data,r);  
            p   =   p->next;  
        }  
        while(q)  
        {  
            r=insert(q->data,r);  
            q   =   q->next;  
        }  
        return   r;  
  }  
  void   print(mylist   *h)  
  {  
        mylist   *temp;  
        temp=h;  
        while(temp=!NULL)  
        {  
              printf("%d",temp->data);  
            temp=   temp->next;  
        }  
  }  
  main()  
  {  
      mylist   *head;  
      if(head->next==NULL){printf("ok");  
      exit(0);       }  
      head=insert(10,head);  
      print(head);  
   
  }  
   
  这个程序的目的     是  
   
  编写连表建立函数,输入时     自动排序建立连表  
   
   
  编写连表   插入函数,删除函数   (删除某个接点,并释放存储区)  
   
  编写   连表合并函数,可以合并两个已知函数,并保证   合并后连表有序  
   
   
  主程序     应具有   连续输入功能  
  和显示输出  
   
  具有简单的操作界面   (只要是简单的   提示语句就成)  
   
   
  这个主程序我没怎么写,就是在测试时     出现了死循环,也不知道怎么回事  
   
  不知道大家可否   帮我写个主程序  
  再帮我检查别的函数是不是好用  
   
   
  好象要求多了些,大家多受累了 问题点数:100、回复次数:17Top

1 楼lark3(海鸥)回复于 2004-09-03 20:52:29 得分 0

自己写吧,学习...Top

2 楼coyprightbao(Mr'Bao)回复于 2004-09-03 21:13:28 得分 0

mark!  
  Top

3 楼xteaj(半桶水)回复于 2004-09-03 21:36:29 得分 0

我的程序都是用C++写的,注意了,在C中要稍作调整。  
  main()  
  {  
          int   i   ,data;  
          mylist   *list1,*list2;  
          do  
          {  
                system("cls");//清屏  
                printf("1......insert   data   to   list1\n");  
                printf("2......delete   data   from   list1\n");  
                printf("3......insert   data   to   list2\n");  
                printf("4......delete   data   from   list2\n");  
                printf("5......join   list1   and   list2\n");  
                printf("6......print   list1   and   list2\n");  
                printf("7......exit\n");  
                printf("Please   select   :");  
                scanf("%d",&i)  
                switch(i)  
                {  
                    case   1:    
                      system("cls");  
                      printf("Please   input   data   for   list1:");  
                      scanf("%d",&data);  
                      list1   =   insert(data,list1);  
                    .........  
  剩下的自己写,不要忘了给分,上次的分还没给呢Top

4 楼maxcode(人弋石马)回复于 2004-09-03 21:39:55 得分 0

楼上的太苛刻了吧!!!  
  翻人家老底儿  
   
  哈哈!!!  
  学习Top

5 楼gsp396(火烧耳朵)回复于 2004-09-03 21:45:21 得分 0

大家     仔细看看  
   
  那个程序     是有问题的       出现死循环了    
   
  谁帮我看看,仔细的看看     每个函数的看看  
   
  分我过几天给拉,这写天   闹心Top

6 楼gsp396(火烧耳朵)回复于 2004-09-03 21:46:17 得分 0

要求连续输入   数据  
   
   
  再加上一些简单的提示Top

7 楼xteaj(半桶水)回复于 2004-09-03 21:49:24 得分 0

在case中再写一个while也不难,自己试一试吧。Top

8 楼xteaj(半桶水)回复于 2004-09-03 21:54:50 得分 2

mylist   *   insert(int   d,   mylist   *head)/*建立链表就是一个插入数据的过程   */  
  {  
      mylist   *p,*q,*r;  
      p   =(struct   mylist   *)   malloc(sizeof(struct   mylist));  
      p->data   =   d;  
      p->next   =NULL;  
      if(head   ==NULL)  
          return   p;  
        q   =   head;  
      if(q->data   <   d)  
      {  
            q->next   =   p->next;  
            p->next   =   q;  
      }  
      return   head;  
      r=   q;  
      q   =   q->next;  
      while(q   &&   q->data   <   d)  
      {  
            r   =   q;  
            q   =   q->next;  
      }  
      r   ->next   =   p;  
      p   ->next   =   q;  
      return   head;  
  }  
  这是insert中的一个小错误,对不起了Top

9 楼xteaj(半桶水)回复于 2004-09-03 21:57:36 得分 0

void   print(mylist   *h)  
  {  
        mylist   *temp;  
        temp=h;  
        while(temp!=NULL)//这都能错,真佩服你了  
        {  
              printf("%d",temp->data);  
            temp=   temp->next;  
        }  
  }Top

10 楼liacw1017(梁上君子)回复于 2004-09-03 22:02:56 得分 2

太長了,沒時間寫啊,支持以下樓主算了Top

11 楼fanbest(座天使长)回复于 2004-09-03 22:03:11 得分 2

自己写吧.  
  自己写吧.  
  摆脱别人写代码可不好滴.Top

12 楼xteaj(半桶水)回复于 2004-09-03 22:07:05 得分 5

自己多练习练习,注意输出时两个数据之间要留空格!  
  好好学习,天天学习,定能出好成绩!  
  祝你早日学好C!Top

13 楼UPCC(杂食动物)回复于 2004-09-03 23:13:13 得分 80

#include<stdio.h>  
  #include<stdlib.h>  
  typedef   struct   mylist  
  {  
      int   data;  
      struct   mylist   *next;  
  }mylist;  
   
  mylist   *   insert(int   d,   mylist   *head)/*建立链表就是一个插入数据的过程   */  
  {  
      mylist   *p,*q,*r;  
      p   =   (struct   mylist   *)   malloc(sizeof(struct   mylist));  
      p->data   =   d;  
      p->next   =NULL;  
      if(head   ==   NULL)  
          return   p;  
        q   =   head;  
        /*  
      if(q->data   <   d)  
      {  
          p->next   =   q;  
  return   p;  
      }//这里必须使用双大括号,不然会返回在return   p;  
      */  
        //其实上面这一步没有必要  
      r=   q;  
      //q   =   q->next;  
      while(q   &&   q->data   <   d)  
      {  
            r   =   q;  
            q   =   q->next;  
      }  
      if(r==q)//防止头是已经大了  
      {  
      p->next   =   head;  
      return   p;  
      }  
      if(q)//有时候已经到队为了,这是q==NULL了  
      {  
  r   ->next   =   p;  
  p   ->next   =   q;  
      }  
      else  
      {  
      r->next   =   p;  
      }  
      return   head;  
  }  
   
  mylist   *del(mylist   *head)  
  {  
      mylist   *q,   *r;  
      int   d;  
      printf("del   data:");  
      scanf("%d",&d);  
   
      q   =   head;  
      r   =   q->next;  
      if(q->data   ==   d)  
      {  
            free(q)   ;  
            return   r;  
      }  
      while(   r->data   !=   d   &&   r)  
      {  
            q   =   r;  
            r   =   r->next;  
      }  
      if(r   ==   NULL)   return   head;  
      q->next   =   r->next;  
      free(r);  
      return   head;  
  }  
   
  mylist   *join(mylist   *p,mylist   *q)  
  {  
        mylist   *r=NULL;//不然不会被正常排列  
        while(p)/*因为插入过程会排序,所以可以直接插入数据*/  
        {  
            r=insert(p->data,r);  
            p   =   p->next;  
        }  
        while(q)  
        {  
            r=insert(q->data,r);  
            q   =   q->next;  
        }  
        return   r;  
  }  
  void   print(mylist   *h)  
  {  
        mylist   *temp;  
        temp=h;  
        while(temp)////  
        {  
              printf("%d\n",temp->data);  
              temp   =   temp->next;  
        }  
  }  
  int   main()  
  {  
      /*  
        这里没有初始化会在insert里面  
            if(head   ==   NULL)  
          return   p;  
  出现问题,至少应该在定义时mylist*   head   =   NULL;但这不是你要的。  
      */  
      mylist   *head=(mylist*)malloc(sizeof(mylist));  
      head->data   =   5;//这是先个个数字,不燃是随机值而在insert里对比会有问题(小)  
      head->next   =   NULL;//没有初始化,head->next会是一个随机值  
      /*  
      if(head->next==NULL){printf("ok");  
      exit(0);       }  
      */  
      head=insert(10,head);  
      head=insert(8,head);  
      head=insert(1,head);  
      print(head);  
      printf("del   start\n");  
      head   =   del(head);  
      print(head);  
      printf("join   start\n");  
      mylist*   tmp   =   (mylist*)malloc(sizeof(mylist));  
      tmp->data   =   4;  
      tmp->next   =   NULL;  
      head   =   join(head,tmp);  
      print(head);  
      return   0;  
  }  
   
   
  这是你需要的Top

14 楼UPCC(杂食动物)回复于 2004-09-03 23:51:06 得分 0

记得释放内存  
  free()Top

15 楼Tycool(Xuco)回复于 2004-09-04 10:07:15 得分 5

强烈建议学习debug,比如在VC中调试着找问题Top

16 楼qingyuan18(zealot_tang)回复于 2004-09-04 14:54:24 得分 2

这不是数据结构么?我喜欢,先在机器上调一下,等会儿就来Top

17 楼liyu_ah()回复于 2004-09-04 16:10:18 得分 2

main()  
  {  
      mylist   *head   =NULL;      
            head=insert(10,head);  
      print(head);  
   
  }  
   
  程序写的一点都不规范  
   
  懒的看  
  Top

相关问题

  • 不会读程序
  • 改良程序~
  • 程序改写
  • 程序改错
  • java程序改错
  • 不会灌水的程序员,不是好的程序员?!
  • 怎样使应用程序在显卡画面设置中设定字体显示为小/大/其它时,程序界面不会改变?
  • vc程序从一个目录copy到另一个目录,会不会改动一个,另一个也改动???
  • 一个不会调试的程序员?
  • 救救我,我不会这个程序!!

关键词

  • 函数
  • 数据
  • 学习
  • mylist
  • head
  • next
  • 插入
  • insert
  • temp
  • 程序

得分解答快速导航

  • 帖主:gsp396
  • xteaj
  • liacw1017
  • fanbest
  • xteaj
  • UPCC
  • Tycool
  • qingyuan18
  • liyu_ah

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo