设一单向链表的头指针为head,链的记录key域,试设计算法将此链表的记录按照key递增的次序进行排序

来源:百度知道 编辑:UC知道 时间:2024/06/24 17:16:47
用C语言或C++做~要详细步骤~不允许使用数组做辅助存储
我要的是代码~谢谢大家来帮忙写出来吧~!~~

我来说下思想吧
我水平不怎么高,但我说的应该比较容易实现
主要是采用冒泡排序的思想时间复杂度为O(n^2)
如下面的一个链表
2-5-1-7-6-3-8
第一个指针p指向-2,第二个指针q指向5时,可发现q->next->key<q->key
交换1与5的位置
即交换1与5的key域,而且显得简单点
也可以交换改变1与5还有2的地址,但那样稍微麻烦点
交换1与5 后得到
2-1-5-7-6-3-8
两个指针继续向后移动
发现7比6大
交换7与6得到
2-1-5-6-7-3-8
又发现7比3大
再次交换
得到
2-1-5-6-3-7-8
第一趟遍历后得到此序列
经过N(N-1)/2次比较后可得到增序的表

本人认为学C主要学的是思想
本人从来不记算法
从来不听细节
但自己动手较多
希望自己动手做
那样子提高很快的

typedef struct CircleList
{ int key;struct CircleList *next;}*listnode;
ListSort(listnode head)
{int k,min,i,j;
listnode p,q,t;
p=head->next;
while(p->next!=head->next){p=p->next;k+=1;}
p=head;
j=1;
for(i=1;i<k;i++)
{while(j<=i){p=p->next;j++;}
min=p->key;
q=p;
while(p->next!=head->next){
if(min>p->key){min=p->key;t=p;}
p=p->next;}
t->key=q->key;

设一单向链表的头指针为head,链表的记录中包含key域,将此链表的记录按照key递增的次序进行就地排序. 设一单向链表的头指针为head,链的记录key域,试设计算法将此链表的记录按照key递增的次序进行排序 设head为单链表的头指针 计算一个已经建好的单链表其头指针为head的节点个数的函数 用算法实现有一个单链表其头指针为head,编写一个函数计算域为x的结点个数。 数据结构中指针逆指怎么做?是单向的链表 C++单向链表逆序为新的单向链表(整形)并按大到小排序 无头结点的链表,数据域为data,指针域为 next,如何根据数据域将链表从小到大链接 带头节点的单向链表的头节点怎么理解 链表里,头指针 头结点的作用