数据结构之单链表的排序
一、 实现的步骤
1、生成一个单链表 2、对生成的链表排序
二、实现代码
#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
);
bool
is_empty(PNODE
);
int length_list(PNODE
);
void sort_list(PNODE
);
int main
(void)
{
PNODE pHead
= NULL;
pHead
= creat_list();
printf("链表的内容是:");
traverse_list(pHead
);
sort_list(pHead
);
printf("排序后链表的内容是:");
traverse_list(pHead
);
return 0;
}
PNODE
creat_list(void)
{
int len
;
int val
;
int i
;
PNODE pHead
= (PNODE
)malloc(sizeof(NODE
));
if(NULL == pHead
)
{
printf("内存分配失败,程序结束!!!\n");
exit(-1);
}
printf("请输入您要生成的节点个数:\nlen =");
scanf("%d",&len
);
PNODE pTail
= pHead
;
for(i
=0;i
<len
;i
++)
{
printf("您输入的第%d个节点的数为:",i
+1);
scanf("%d",&val
);
PNODE pNew
= (PNODE
) malloc(sizeof(NODE
));
if(NULL == pNew
)
{
printf("内存分配失败,程序结束!!!\n");
exit(-1);
}
pNew
->data
= val
;
pNew
->pNext
= NULL;
pTail
->pNext
= pNew
;
pTail
= pNew
;
}
printf("\n");
return pHead
;
}
void traverse_list(PNODE pHead
)
{
PNODE p
= pHead
->pNext
;
while(p
!= NULL)
{
printf("%d ",p
->data
);
p
= p
->pNext
;
}
printf("\n\n");
return;
}
bool
is_empty(PNODE pHead
)
{
if(pHead
->pNext
== NULL)
return true
;
else
return false
;
}
int length_list(PNODE pHead
)
{
int length
= 0;
PNODE p
= pHead
->pNext
;
while(p
!= NULL)
{
length
++;
p
= p
->pNext
;
}
return length
;
}
void sort_list(PNODE pHead
)
{
int i
,j
,t
;
int len
= length_list(pHead
);
PNODE p
,q
;
for(i
=0,p
= pHead
->pNext
; i
<len
-1; i
++,p
= p
->pNext
)
{
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
;
}
}
}
return;
}
三、程序说明
1、这是我第二次在写博客,也是刚开始学习数据结构这门课,肯定在一些名词上说的不准确,但我也尽量在注意这个问题,请碰巧看到这篇博客的前辈们能指出不足,必定感激不尽。 2、程序在dev C++中可以通过编译并运行。 3、程序需要注意的问题都在注释里面解释清楚了。
转载请注明原文地址: https://mac.8miu.com/read-500797.html