不带头结点的单向链表排序——插入排序(C语言)
2013-06-16 22:41
316 查看
LinkList* LinkListInsertSort(LinkList* pHead) { LinkList *pFirst = (LinkList *)NULL; /* 原链表剩下未排序节点的头指针 */ LinkList *pCurrInsert = (LinkList *)NULL; /* 无序链表中当前待插入节点 */ LinkList *pPrev = (LinkList *)NULL; /* 有序链表中插入位置的前一个节点 */ LinkList *pPost = (LinkList *)NULL; /* 有序链表中插入位置的有一个节点 */ pFirst = pHead->m_next; /* 原链表未排序链表的头节点 */ pHead->m_next = NULL; /* 仅含有一个节点的有序链表 */ while (NULL != pFirst)/* 遍历剩下无序的链表 */ { pCurrInsert = pFirst; pPost = pHead; while ((NULL != pPost) && (pPost->m_key < pCurrInsert->m_key)) { pPrev = pPost; pPost = pPost->m_next; } pFirst = pFirst->m_next; if (pPost == pHead) /* 节点pCurr要插在第一个节点之前 */ { pHead = pCurrInsert; } else /* pPrev是pPost的前驱 */ { pPrev->m_next = pCurrInsert; } pCurrInsert->m_next = pPost; /* 插入节点pCurrInsert */ } return pHead; }
相关文章推荐
- C语言实现链表之单向链表(七)尾结点后插入结点
- 单向链表逆转(带头结点)的两种方法
- C语言实现单链表(不带头结点)节点的插入
- 不带头结点的单链表的实现(C语言)
- 带头结点的循环单向链表
- 逆序带头结点的单向链表
- 带头结点的单向链表
- C语言下单向链表的排序
- C语言实现单链表(带头结点)的基本操作
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- 统计带头结点的单向链表的个数并存放在形参n所指的单元中。 欢迎评论 指点。
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- c语言实现--不带头结点的单链表操作
- C语言实现链表之单向链表(九)在任意位置插入结点
- 单向不带头结点不带环的链表实现
- C语言实现链表之单向链表(十)删除任意结点
- C语言实现单链表(不带头结点)
- 数据结构模版----单链表SimpleLinkList[不带头结点](C语言实现)
- C语言实现单链表-不带头结点