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

链表起泡法从小到大排序,该怎么解决

2012-04-06 
链表起泡法从小到大排序C/C++ codevoid Sort_BigToSmall(){EMPTYBLOCKQUEUE *p1,*p2,*pBefore,*pTempint

链表起泡法从小到大排序

C/C++ code
void Sort_BigToSmall(){    EMPTYBLOCKQUEUE *p1,*p2,*pBefore,*pTemp;    int flag; // 如果没有经过交换,说明此时已经有序,那就跳出循环,    p1 = EmptyBlockHead;    while (p1 != NULL)    {        flag = 0;        p2 = EmptyBlockHead;         while (p2->next != NULL)        {            if ( p2->EmptyBlockNode.size < p2->next->EmptyBlockNode.size )            {                pTemp = p2;                p2 = p2->next;                if ( p2 != EmptyBlockHead )                {                    pBefore->next = p2;                }                pTemp->next = p2->next;                p2->next = pTemp;                flag = 1;            }            pBefore = p2;            p2 = p2->next;        }        if (flag == 0)        {            break;        }        p1 = p1->next;    }}


编译可以通过,执行的时候出现什么内存之类的问题

[解决办法]
lz,看你的等级 调试应该不在话下吧?
[解决办法]
你交换值就可以了撒 干嘛还要破坏原来链表的指向
[解决办法]
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;                    }    }} 

热点排行