给一个简单的数组冒泡排序算法和程序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;//他的下节点成为他的下下节点c语言链表冒泡排序,其他不变}pre = pre->next;//循环遍历后面的结点mid = pre->next;tai = mid->next;}}}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-137386-1.html