数据结构单链表插入排序

2022.10.02,有帮助可以一键三连,动作虽小,但是为博主的创作动力。


任务描述

本关任务:有一个带头结点的单链表L(至少有一个数据结点),设计一个算法使其元素递增有序排列。

编程要求

根据提示,在右侧编辑器补充代码,完成函数void sort_list(LinkNode *&L),该函数功能是对带头结点的单链表L进行插入排序,使其递增有序。

各种格式

输入格式
输入包括两行。
第一行为一个整数n。
第二行为空格隔开的n个整数。

输出格式
输出包括两行。
第一行为排序之前的单链表。每个数据后一个空格。
第二行为递增排序之后的单链表。每个数据后一个空格。

样例输入
10
1 3 2 9 0 4 7 6 5 8

样例输出
L: 1 3 2 9 0 4 7 6 5 8
L: 0 1 2 3 4 5 6 7 8 9

开始你的任务吧,祝你成功!

C++代码

#include "linklist.h"

/**
 * 单链表L递增(插入)排序
 */
void sort_list(LinkNode *&L)
{
	//请在下面编写代码
	/******************Begin******************/
    LinkNode *p,*pre,*r;
    p = L->next->next;		
    L->next->next = NULL;	 
    while(p != NULL){
        r = p->next; 
        pre = L;
        while(pre->next !=NULL && p->data > pre->next->data)
            pre = pre->next; 
        p->next = pre->next;
        pre->next = p;
        p = r;	
    } 
	/*******************End*******************/
}

int main()
{
	LinkNode *L;
	// int n = 10;
	// ElemType a[] = {1, 3, 2, 9, 0, 4, 7, 6, 5, 8};
	int n;
	scanf("%d", &n);
	int *a = (int*)malloc(sizeof(int) * n);
	for (int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	CreateListR(L, a, n);		//创建单链表
	printf("L: "); DispList(L);	//输出单链表
	sort_list(L);				//单链表递增排序
	printf("L: "); DispList(L);	//输出排序后的单链表
	DestroyList(L);				//销毁单链表
	free(a);					//释放数组
	return 0;
} 
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值