首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言链表冒泡排序,该如何解决

2012-03-28 
C语言链表冒泡排序给一个简单的链表冒泡排序算法和程序,注释要写详细。不要在别处粘贴代码过来。我想实习的

C语言链表冒泡排序
给一个简单的链表冒泡排序算法和程序,注释要写详细。不要在别处粘贴代码过来。我想实习的是交换的是他们的指针域也就是每个结点而不是结点里面的数据。

C/C++ code
struct Node{   int data;   struct Node * pNext;};

假设上面已经定义好了结点,也生成了一个链表出来了(带有头结点的),现在你们只要给我排序的代码和算法要写详细。

[解决办法]
你还不如在网上搜一下源码快!
[解决办法]
在那个帖子里已经回答了
那代码也应该是可以的,你只需要排序就把排序的部分取出来
可以直接用的
[解决办法]
C/C++ code
/**功能:求链表长度(头结点不计算)*参数:链表首地址*返回值:链表结点数*/int length(linklist head){    int len = 0;    if(head == NULL)        return 0;    head = head->next;    while(head != NULL)    {        ++len;        head = head->next;    }    return len;}/**功能:判断两个结点的数据大小*参数:两个结点的地址*返回值:firstNode中数据大于secondNode中数据返回1*firstNode中数据等于secondNode中数据返回0*firstNode中数据小于secondNode中数据返回-1*/int nodeCompare(linklist firstNode, linklist secondNode){    if(firstNode->data > secondNode->data)        return 1;    else if(firstNode->data == secondNode->data)        return 0;    else if(firstNode->data < secondNode->data)        return -1;    return -2;}/**功能:链表排序(带头结点)*参数:链表首地址**/void listSort(linklist head){    linklist pre, mid, tai;    int i, j;    int len = length(head);    if(head == NULL || head->next == NULL)        return;    for(i = 0; i < len - 1; ++i)    {        pre = head;        mid = head->next;        tai = mid->next;        for(j = 0; j < len - i - 1; ++j)        {            if(nodeCompare(mid, tai) == 1)            {                pre->next = mid->next;                mid->next = tai->next;                tai->next = mid;                            }            pre = pre->next;            mid = pre->next;            tai = mid->next;                    }    }}
[解决办法]
C/C++ code
 void listSort(linklist head){    linklist pre, mid, tai;    int i, j;    int len = length(head);    if(head == NULL || head->next == NULL)        return;    for(i = 0; i < len - 1; ++i)    {//每次排序都是从头结点开始,共len次        pre = head; //记录前一个节点          mid = head->next;//记录中间节点         tai = mid->next;//记录尾节点         for(j = 0; j < len - i - 1; ++j)        {            if(nodeCompare(mid, tai) == 1)            {//如果成立                pre->next = mid->next;//将pre后面的两个节点交换位置                mid->next = tai->next;//即pre的next的指向他的下下个节点,                tai->next = mid;//他的下节点变成他的下下节点,其他不变                           }            pre = pre->next;//循环遍历后面的节点            mid = pre->next;            tai = mid->next;                    }    }} 

热点排行