| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1500 人关注过本帖
标题:冒泡法排序 单链表进行升序排序
只看楼主 加入收藏
云团
Rank: 2
等 级:论坛游民
帖 子:36
专家分:41
注 册:2017-1-9
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
冒泡法排序 单链表进行升序排序
将一个已经建立的单向链表进行升序排序
  程序如下:
   
程序代码:
  void sort(stu *head)

 { stu *ptr,*preptr,*endptr;
     int t;
     ptr=head->next;
     while(ptr->next!=NULL)
         ptr=ptr->next;
      endptr=ptr;
     ptr=head->next;
     while(ptr!=endptr)
       { while(ptr->next!=NULL)
            { if(ptr->data>ptr->next->data)
                 { t=ptr->data;
                     ptr->data=ptr->next->data;
                     ptr->next->data=t;
                 }
              preptr=ptr; ptr=ptr->next;
            }
           endptr=preptr;  ptr=head->next;
       }

 }
  程序运行没有结果!!!
不知道程序错在哪里,大家看一下
2017-04-06 21:45
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:5 
先建立一个辅助头节点,这样就不用考虑插入到头前面的情况。用完头指针后移,释放辅助。
2017-04-06 22:25
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 楼主 云团
这样试试看~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define LEN sizeof(Stu)

typedef struct Stu
{
    int data;
    struct Stu* next;
}Stu;

Stu* Creat_Node();

Stu* Creat();

void Print(char* p,Stu* stu);

Stu* Sort(Stu* stu);

void Del(Stu* stu);

int main()
{
    Stu* stu=Creat();

    Print("排序前输出数据如下:\n",stu);

    stu=Sort(stu);

    Print("排序后输出数据如下:\n",stu);

    Del(stu);

    return 0;
}

Stu* Creat_Node()
{
    Stu* stu=(Stu*)malloc(LEN);

    if (stu==NULL)
    {
        puts("分配空间失败!");
        exit(0);
    }

    memset(stu,0,LEN);

    return stu;
}

Stu* Creat()
{
    int n=0;
    Stu* stu=Creat_Node();
    Stu* head=stu;

    puts("请输入数据,输入0结束输入:");
    while (scanf("%d",&n)&&n)
    {
        stu=stu->next=Creat_Node();
        stu->data=n;
    }

    return head;
}

void Print(char* p,Stu* stu)
{
    if (stu->next==NULL)
    {
        puts("该表数据为空!");
        return ;
    }
    printf(p);
    for (;stu=stu->next;printf("%-4d",stu->data));
    puts("");
}

Stu* Sort(Stu* stu)
{
    Stu* head=stu;
    Stu* p=NULL;

    int t=0;

    while (p)
        p=p->next;

    while (stu!=p)
    {
        while (stu->next!=p)
        {
            if (stu->data>stu->next->data)
            {
                t=stu->data;
                stu->data=stu->next->data;
                stu->next->data=t;
            }
            stu=stu->next;
        }

        p=stu;
        stu=head->next;
    }

    return head;
}

void Del(Stu* stu)
{
    Stu* p=stu;
    while (p=p->next)
    {
        free(stu);
        stu=p;
    }

    free(stu);
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-06 23:03
快速回复:冒泡法排序 单链表进行升序排序
数据加载中...
 
   



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

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