带头结点的链表 排序
2014-09-17 16:25
169 查看
typedef struct link
{
int data;
struct link *next;
}Node,*pNode
void link_sort(pNode head)
//带头结点的链表
head头指针 pNode 为 链表结点 指针类型
{
pNode pre,p,temp; //
p保存当前要插入的结点,pre插入位置的前驱结点
p=head->next;
// temp保存p(插入结点) 的后一个结点
if(p!=NULL)
{
temp=p->next;
p->next=NULL;
// 考虑当链表为空的情况,若为空p->next已经为空
p=temp;
}
while(p) //当只要一个结点时 p已经等于NULL
,不空则从第2个结点开始插入并排序
{
pre=head;
while( (pre->next)&&
(pre->next->datadata) )
//while判断里的前后顺序不能变
pre=pre->next;
//当pre指想最后一个结点时结束 ; 这里pre为找待插入位置的前驱结点
//
如果换了while里的顺序会导致pre->next->data读取错误
temp=p->next;
//temp保存插入结点后面一个结点
p->next=pre->next;
//插入结点
pre->next=p;
p=temp;
}
}
{
int data;
struct link *next;
}Node,*pNode
void link_sort(pNode head)
//带头结点的链表
head头指针 pNode 为 链表结点 指针类型
{
pNode pre,p,temp; //
p保存当前要插入的结点,pre插入位置的前驱结点
p=head->next;
// temp保存p(插入结点) 的后一个结点
if(p!=NULL)
{
temp=p->next;
p->next=NULL;
// 考虑当链表为空的情况,若为空p->next已经为空
p=temp;
}
while(p) //当只要一个结点时 p已经等于NULL
,不空则从第2个结点开始插入并排序
{
pre=head;
while( (pre->next)&&
(pre->next->datadata) )
//while判断里的前后顺序不能变
pre=pre->next;
//当pre指想最后一个结点时结束 ; 这里pre为找待插入位置的前驱结点
//
如果换了while里的顺序会导致pre->next->data读取错误
temp=p->next;
//temp保存插入结点后面一个结点
p->next=pre->next;
//插入结点
pre->next=p;
p=temp;
}
}
相关文章推荐
- 不带头结点的单向链表排序——插入排序(C语言)
- 单链表带头结点&不带头结点
- 【数据结构】·【带头结点的单链表】
- 单链表带头结点&不带头结点
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- 单链表带头结点&不带头结点
- 带头结点的单链表冒泡排序
- 删除不带头结点的单链表的非尾结点&&逆序打印单链表
- 带头结点和不带头结点的尾插法建立双链表
- 带头结点与不带头结点的单链表初始化
- 线性表的链式存储结构_单向链表[带头结点]_C#实现
- 带头结点的链表
- 对 带头结点的单链表 的操作
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 带头结点和不带头结点的单链表的尾插法以及各种操作
- 带头结点单链表的各种各种运算(C++模板类实现)
- 数据结构题集(严蔚敏)2.37 改造带头结点的双循环链表
- 带头结点的单链表反转
- 带头结点和不带头结点的单链表的尾插法以及各种操作
- TypeList 之 DerivedToFront 把类型链表中类型按继承层次排序(子类 -> 基类)