c语言链表冒泡排序,C语言链表冒泡排序,该怎么解决

ef51c0f380615533401969f5c2f3a35f.png

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

C/C++ code

8de716c77aa003f164b6fb1791bd377a.png

struct Node

{

int data;

struct Node * pNext;

};

假设里面已经定义好了节点,也生成了一个链表出来了(带有头结点的),现在他们即使帮我排序的代码跟算法要写具体。

------解决方案--------------------

c5b9642cf2bf0cd195ff1fd956c029d4.png

你还不如在网上搜一下源码快!

------解决方案--------------------

在那些帖子里早已回答了

50af78e18659b79d5a213449406e90b3.png

那代码也需要是可以的,你只必须顺序就把排序的部分取起来

可以直接用的

------解决方案--------------------

5b26e0369ca13289125a46347a609577.png

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;//他的下节点成为他的下下节点c语言链表冒泡排序,其他不变}pre = pre->next;//循环遍历后面的结点mid = pre->next;tai = mid->next;}}}

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-137386-1.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值