| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 915 人关注过本帖
标题:一个实现链表递增的函数,帮忙修改一下。
只看楼主 加入收藏
星空烨
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-1
收藏
 问题点数:0 回复次数:4 
一个实现链表递增的函数,帮忙修改一下。
求助,我自己写的一个程序.
void OrderList (LinkList *L,int n)
{    LinkList *p=L->next,*q;
     int i,j,k,n;
     q=p->next;
     while(q!=NULL)
     {     
         for(i=0;i<n-1;i++)
              for(j=0;j<n-i-1;j++)
                if(p->data>q->data)
                  {   k=p->data;
                      p->data=q->data;
                      q->data=k;
                  }
           p=p->next;
           
      }
}
目的是为了使线性表LinkList *L按递增方式排列。
希望牛人帮忙改一下。先谢了。
搜索更多相关主题的帖子: 链表 函数 递增 
2008-10-11 16:43
jyycom
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-5-18
收藏
得分:0 
你这个似乎直接冒泡了,并没有对链表进行操作,只是在赋值

重新学习C语言!
2008-10-12 20:14
lovemimi
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-10-12
收藏
得分:0 
你把q=p->next弄到while循环里面,因为但你第一次比较后,只改变了p的指向,q将停在原地不变了
2008-10-12 22:15
lovemimi
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-10-12
收藏
得分:0 
其实你这样做还是不行的,因为if语句执行一次后,p,q指针都没变,你就总是在比较这两个数。这其实就是个简单的排序问题,只是用在链表上罢了,排序你就用冒泡就行了,难得估计你也不会。自己画画图好好看看指针到底应该怎样变化。你可以试着再建立一个链表来放排好序的数
2008-10-12 22:22
xuqing520
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-8-31
收藏
得分:0 
其实你的程序中q一直没有变的,始终指一个定值,我觉得升序排列函数可以这样修改:
void OrderList(LinkList *L,int n)
{
   LinkList *p,*q;
   int i,j,k;
   q=L;
   if(q!=NULL)
   {
      for(i=0;i<n-1;i++)
      {
          p=q->next;
          for(j=i+1;j<n;j++)
          {
             if(q->data>p->data)
             {
           k=p->data;
                 p->data=q->data;
                 q->data=k;
        }
             p=p->next;
          }
          q=q->next;
      }
   }
}
附加一个测试主函数:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

typedef struct Lnode
{
   int data;
   struct Lnode *next;
}LinkList;
LinkList *head;
void OrderList(LinkList *L,int n);
main()
{
   int data,num=0;
   char ch;
   LinkList *p,*ptr;
   printf("Creat a list!\n");
   do
   {
      p=(LinkList*)malloc(sizeof(LinkList));
      if(p==NULL)
      {
         printf("getting memery is failed\n");
         exit(0);
      }
      printf("input the %d-th data of the node: ",++num);
      scanf("%d",&data);
      p->data=data;
      p->next=NULL;
      if(head==NULL)
      {        
         head=p;
      }  
      else
      {         
         ptr->next=p;
      }
      ptr=p;
      printf("There are %d data in the link\n",num);
      printf("Whether to input agian:");
      ch=getche();
      printf("\n");
      ch=tolower(ch);     
   }while(ch=='y');

   ptr=head;
   printf("\nThe source data order: ");
   while(ptr!=NULL)
   {    
     printf("%d ",ptr->data);
     ptr=ptr->next;
   }

   OrderList(head,num);

   ptr=head;
   printf("\nThe sorted data order: ");
   while(ptr!=NULL)
   {
     printf("%d ",ptr->data);
     ptr=ptr->next;
   }
   printf("\n");
}

我在VC6.0平台上运行的,这样修改没有问题,能得到正确结果!
2008-10-13 00:25
快速回复:一个实现链表递增的函数,帮忙修改一下。
数据加载中...
 
   



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

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