单链表交换节点排序,包括选择法、比较法、排序法。
用C实现代码如下:
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW 0
#define OK 1
typedef int Status;
typedef int ElemType;
struct LNode
{
ElemType data;
struct LNode *next;
};
typedef struct LNode LinkList;
LinkList *InitList(LinkList *L);/*初始化一个链表*/
void DestoryList(LinkList *L);/*销假链表*/
void ClearList(LinkList *L);/*清空链表 */
Status ListEmpty(LinkList *L);/*判断链表是否为空 */
int ListLength(LinkList *L);/*返回表的长度 */
Status GetElem(LinkList *L,int i,ElemType *e);/*返回第i个元素的值 */
int LocateElem(LinkList *L,ElemType e,Status(*compare)(ElemType));/*返回L中第1个与e满足关系compare()的数据元素的位序*/
Status PriorElem(LinkList *L,ElemType cur_e,ElemType *pre_e);/*返回前驱的值 */
Status NextElem(LinkList *L,ElemType cur_e,ElemType *next_e);/*返回后继的值*/
Status ListInsert(LinkList *L,int i,ElemType e);/*在带头结点的单链表中第i个位置之前插入元素e*/
Status ListDelete(LinkList *L,int i,ElemType *e);/*在带头结点的单链表中,删除第1个元素,用e返回其值勤*/
void ListTraverse(LinkList *L,void(*visit)(ElemType));/*依次对L的每个元素调用函数visit() */
void print(ElemType e);
Status equal(ElemType c1,ElemType c2);
void Listprint(LinkList *L);
void Merge(LinkList *La,LinkList *Lb);/*两个集合的交集 */
void Merge1(LinkList *La,LinkList *Lb);/*利用函数实现集合的交集*/
/*void Differ(LinkList La,LinkList Lb); *//*两个集合的差集 */
void Union1(LinkList *La,LinkList *Lb);/*利用函数实现集合的并集 */
void Differ(LinkList *La,LinkList *Lb);/*利用函数实现集合的差集 */
LinkList *InitList(LinkList *L)/*构造一个空链链表*/
{
L=(LinkList*)malloc(sizeof(LinkList));/*产生头结点,并使L指向此头结点*/
if(L==NULL) exit(OVERFLOW);
L->next=NULL;
return L;
}
void DestroyList(LinkList *L)/*销毁L*/
{
LinkList *q;
while(L!=NULL)/*L指向结点*/
{
q=L->next;/*q指向首元结点*/
free(L);
L=q;/*L指向原首结点*/
}
}
void ClearList(LinkList *L)
{ /*将表清