求教:c单链表的排序

tomatobin 2011-03-25 10:58:19
如题,建立一个带头指针的单链表。如何根据元素的大小来排序?
LinkList  Creat_LinkList()
/*带头指针的单连表*/
{
LinkList L=NULL;
LNode *s,*r=NULL,*p=NULL;
int x; /*设数据元素的类型为int*/
scanf("%d",&x);
while (x!=flag)
{
s=(LinkList)malloc(sizeof(LNode)); s->data=x;
if (L==NULL) {L=s;} /*第一个结点的处理*/
else r->next=s; /*其它结点的处理*/
r=s; /*r 指向新的尾结点*/
scanf("%d",&x);
}
if ( r!=NULL) r->next=NULL; /*对于非空表,最后结点的指针域放空指针*/
return L;
}

怎样那L进行排序 ?
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouli669826 2011-06-08
  • 打赏
  • 举报
回复
不错 学习了
wenxian8 2011-03-26
  • 打赏
  • 举报
回复
前几天,我也做了一道单链表排序的算法,已经发布在个人网易博客了,
你只要在百度里输入: 单链表冒泡法排序

就可以找到 那个网页了,完整的代码
dcw0402 2011-03-26
  • 打赏
  • 举报
回复
冒泡?
tomatobin 2011-03-26
  • 打赏
  • 举报
回复
谢谢各位,学习了
tomatobin 2011-03-26
  • 打赏
  • 举报
回复
非常感谢啊。。直接交换数据是个不错的选择
hhh_hao 2011-03-25
  • 打赏
  • 举报
回复
基本上类似的,lz可以参考下
hhh_hao 2011-03-25
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;
typedef struct node
{
ElemType data;
struct node* next;
}LinkList;

void CreatList(LinkList **head, int A[], int n)
{
int i;
LinkList *L = *head;
LinkList *s;

for (i = 0; i < n; i++)
{
s = (LinkList *)malloc(sizeof(LinkList));
s->data = A[i];
s->next = L->next;
L->next = s;
}
}
/*选择排序*/
void SelectSort(LinkList **L)
{
LinkList *p = (*L)->next;
LinkList *q, *minp;
int temp;
while ( p != NULL && p->next != NULL)
{
minp = p;
q = p->next;
while(q!=NULL)
{
if(q->data < minp->data)
minp = q;
q = q->next;
}
if(minp != p)
{
temp = minp->data;
minp->data = p->data;
p->data = temp;
}
p = p->next;
}
}
/*直接插入排序*/
void InsertSort(LinkList **L)
{
LinkList *p = (*L)->next, *q, *r;
if(p != NULL)
{
r = p->next;
p->next=NULL;
p = r;
while(p != NULL)
{
r = p->next;
q = (*L);
while(q->next != NULL && q->next->data < p->data)
q = q->next;
p->next = q->next;
q->next = p;
p = r;
}
}
}

int main()
{
int num[10] = {2,4,5,7,6,7,1,3,9,0};
LinkList *head, **LList;
head = (LinkList *)malloc(sizeof(LinkList));
head->next= NULL;
LList = &head;
CreatList(LList, num, 10);
InsertSort(LList);/*SelectSort(LList);*/
return 1;

}

maoxing63570 2011-03-25
  • 打赏
  • 举报
回复
直接取数据域比较撒,用简单点的,当然你也可以用复杂点的,如果需要交换,直接交换数据域就可以了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧