1.链表排序
与数组排序作比较,比较占内存,可以用while循环实现
q=p->pNext; int t; while(NULL!=p->pNext) { if(p->data > q->data) { t=p->data; q->data=p->data; q->data=t; p=p->pNext; q=q->pNext; } }
选择排序法(与数组排序作比较)
void sort_list(PNODE pHead) { int i,j,t; PNODE p,q; len=int len_list(pHead); /*数组选择排序 //for(i=0;i<len-1;++i) //{ for(j=i+1;j<len;++j) //{ //if(a[i]>a[j]) //{ t=a[i]; //a[i]=a[j]; //a[j]=t; //} //} //} //} */ for(i=0,p=pHead->pNext;i<len-1;++i,p=p->pNext)//从第一个有效数字开始,注意++i要更改链表指针 { for(j=i+1,q=p->pNext;j<len;++j,q=q->pNext)//内循环同上 { if(p->data>q->data) { t=p->data; p->data=q->data; q->data=t; } } } }
主函数
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data;// struct Node* pNext// }NODE,*PNODE; // PNODE creat_list(void); void traverse_list(PNODE pNode); bool is_empty(PNODE pHead); int lenth_list(PNODE); bool insert_list(PNODE,int,int); bool delete_list(PNODE,int,int*); void sort_list(PNODE); int main(void) { PNODE pHead=NULL; pHead=creat_list(); traverse_list(pHead); int len=lenth_list(pHead); printf("链表长度为:%d\n",len); if(is_empty(pHead) printf(链表为空!\n"); else printf("链表不为空!\n"); sort_list(pHead); traverse_list(pHead); if(delete_list(pHead,4,&val)) { printf("删除的链表元素为:%d\n",val); } else { printf("删除失败\n"); } return 0; }