首页 > 其他分享 >链表实现插入排序

链表实现插入排序

时间:2023-09-03 09:34:13浏览次数:39  
标签:ListNode 实现 插入排序 next 链表 pNode NULL 节点

将一串整型范围内的数按升序输出。

数据输入样式

16
-53 -3 -54 74 48 18 -24 54 63 663 -9 9 19 -9999 0 789

用链表实现实例:

1)结构体定义

1 struct ListNode
2 {
3     int data;
4     ListNode *next;//结构体指针
5     ListNode *pre; //结构体指针    
6 };

2)建一个初始链表,整型最小值和整型最大值串成一个初始链表,n个数都将在这两个节点之间。

 

  

1     ListNode *headNode = new ListNode{ minN,NULL,NULL }; //建头节点 存minN最小值 
2     ListNode *tailNode = new ListNode{ maxN,NULL,NULL }; //建尾节点 存maxN最大值
3     
4     //建一个只有minN和maxN两个节点的链表,    
5     headNode->next= tailNode;
6     tailNode->pre =headNode;

3)寻找位置将n个新节点插入链表中

 

 1         //建立新的节点 
 2         cin>>d; 
 3         ListNode* newNode = new ListNode{ d,NULL,NULL  };
 4         
 5         //从头遍历链表,为新节点查找插入位置,新节点将会插入到当前节点的前面
 6         pNode=headNode;
 7         while(pNode->next!=NULL && pNode->data<=d ) pNode=pNode->next;
 8         
 9         //修改指针,实现插入操作 ,注意修改的顺序       
10         newNode->next=pNode;       // 新节点的next指向当前节点
11         newNode->pre=pNode->pre;   // 新节点的per指向当前节点的前一个节点
12      pNode->pre->next=newNode; // 修改前一个节点的next,使其指向新节点
13 pNode->pre=newNode; // 修改当前节点的pre,使其指向新节点

 3)掐头去尾输出链表中的值

1     pNode=headNode->next;
2     while(pNode->next!=NULL){
3         cout<<pNode->data<<" ";
4         pNode=pNode->next;
5     }

完整代码:

 1 /*
 2 将一串整型范围内的数按升序输出。
 3 
 4 16
 5 -53 -3 -54 74 48 18 -24 54 63 663 -9 9 19 -9999 0 789 
 6 
 7 使用链表实现
 8 flatte@20230903
 9 */
10 
11 
12 #include<bits/stdc++.h>
13 using namespace std;
14 #define LL long long
15 
16 const int N = 1e5+10;
17 const int minN=INT_MIN;
18 const int maxN=INT_MAX;
19 int n,d; 
20 
21 struct ListNode
22 {
23     int data;
24     ListNode *next;//结构体指针
25     ListNode *pre; //结构体指针    
26 };
27 
28 
29 int main(){
30 
31     ListNode *headNode = new ListNode{ minN,NULL,NULL }; //建头节点 存minN最小值 
32     ListNode *tailNode = new ListNode{ maxN,NULL,NULL }; //建尾节点 存maxN最大值
33     
34     //建一个只有minN和maxN两个节点的链表,    
35     headNode->next= tailNode;
36     tailNode->pre =headNode;
37     
38     
39     //将n个数据插入到这个链表中 
40     ListNode *pNode; 
41   
42     cin>>n;
43     for (int i=1; i<=n; i++) {        
44         
45         //建立新的节点 
46         cin>>d; 
47         ListNode* newNode = new ListNode{ d,NULL,NULL  };
48         
49         //从头遍历链表,为新节点查找插入位置
50         pNode=headNode;
51         while(pNode->next!=NULL && pNode->data<=d ) pNode=pNode->next;
52         
53         //修改指针,实现插入操作        
54         newNode->next=pNode;
55         newNode->pre=pNode->pre;        
56         pNode->pre->next=newNode;
57         pNode->pre=newNode;
58 
59     }
60     
61     //掐头去尾输出链表中的值 
62     pNode=headNode->next;
63     while(pNode->next!=NULL){
64         cout<<pNode->data<<" ";
65         pNode=pNode->next;
66     }
67     
68     return 0;
69 }

 

 

     

标签:ListNode,实现,插入排序,next,链表,pNode,NULL,节点
From: https://www.cnblogs.com/flatte/p/17674598.html

相关文章

  • 如何使用C++11原子操作实现自旋锁
    什么是自旋锁?C++自旋锁是一种低层次的同步原语,用于保护共享资源的访问。自旋锁是一种轻量级的锁,适用于短时间的资源锁定。自旋锁的特点:当一个线程尝试获取已经被另一个线程占有的自旋锁时,这个线程会进入一个循环(自旋),在这个循环中它不断地检查锁是否已经被释放。如果锁已经被释放,那......
  • 实现python自动化进行薪资核算——关于pip和pandas库的版本问题
    实现python自动化薪资核算的问题并不难,我们需要一个含有员工职位、姓名、基本工资、奖金、扣款等基本信息的xlsx表,然后通过编写一个含有读取信息函数,薪资计算函数、输出薪资函数的python程序,即可解放双手,实现沉浸式核算薪资。 那么在进行正式编写程序之前,我们需要先认识下一个库—......
  • 单链表相关
    单链表创建总结*创建ListNode结点类有属性valnext考虑现实使用val定义为一个no和若干val,toString()重写*创建SingleLinkedList单链表类有private属性头指针head需要初始化*单链表类需要有的方法:*遍历方法:不为空、则从头指针.next首元结点开始遍历,直至尾部*插入结......
  • 京东API接口解析,实现获得JD商品评论
    要获取京东商品评论,需要使用京东的开放平台API接口。以下是一个基本的示例,解析并实现获取JD商品评论的API接口。首先,你需要访问京东开放平台并注册一个开发者账号。注册完成后,你需要创建一个应用并获取到API的权限。在获取到API权限后,你可以在开发者的控制台中找到API的使用文档。......
  • 基于ASP的网上选课系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:网上选课系统的开发是为了更好的让各个高校充分的利用校园网的软硬件资源,通过B/S架构来实现网上选课系统,实现了网上选课系统的无纸化管理,让网上选课系统、查询课程更为方便,让导师审核选课更加快捷。意义:网上选课系统使学生足不出户就能够提交选课,有效的......
  • 忻州师院毕业论文管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:忻州师院毕业论文管理系统的开发是为了更好的让各个高校充分的利用校园网的软硬件资源,通过B/S架构来实现忻州师院毕业论文管理系统,管理毕业论文信息,老师可以在线查询毕业论文进程,节省时间,提高效率。意义:本文研发的忻州师院毕业论文管理系统结合高校具体的......
  • 基于ASP的人才招聘管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:基于ASP的人才招聘管理系统的开发是为了提高企业的工作效率,减少企业员工的工作量以及相应的时间,节省一些不必要的开支,从而让求职者可以更快的找到工作,企业快速的挖掘人才。人才招聘管理系统不仅能为经营者提供相对应的市场信息,并且能够随时掌握市场的发展......
  • 芦芽山旅游资源管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义: 本课题拟开发一个基于java的芦芽山旅游资源管理系统,开发的主要目标是通过芦芽山旅游资源管理系统,提供有用的信息数据,为旅游者提供可靠的旅游信息,对推动地方旅游业的发展具有积极有效的促进作用。本芦芽山旅游资源管理系统主要包括景点展示、酒店查看、在线......
  • 通过调整解码器参数,EasyPlayer.js可以实现H.265音频解码
    EasyPlayer是一款稳定且流畅的流媒体播放器,它能够支持H.264和H.265视频播放。该播放器能够处理各种视频流格式,包括RTSP、RTMP、HLS、FLV和WebRTC等。EasyPlayer具备多个版本,例如EasyPlayer-RTSP、EasyPlayer.js和EasyPlayerPro,以满足不同用户在不同场景下的需求。此外,EasyPlayer还......
  • reduce实现异步串行重复请求同一个接口
    在项目中会遇到循环请求接口的情况,不管使用for、forEach、map进行循环都会出现并行请求接口出现高并发,使用reduce实现异步串行重复请求同接口,等待上一次请求结束后在进入下一次请求。需要循环的对象数组:letloopList=[{code:1,name:"名称1",p......