当前位置: 首页 > news >正文

线性表的应用

  1. 链式有序表的合并
  2. 旋转链表
  3. 分隔链表
  4. 翻转链表

#include<iostream>

#include<cstdlib>

using namespace std;

typedef int ElemType;

typedef int Status;

typedef struct LNode{

ElemType data;

struct LNode *next;

int val;

}LNode,*LinkList;

//创建链表

void CreateList_H(LinkList &L,int n){

L=new LNode;

L->next=NULL;

cout<<"请输入"<<n<<endl;

for(int i=0;i<n;++i){

LNode*p =new LNode;

cin>>p->data;

p->next=L->next;

L->next=p;

}

}

//输出链表

void PrintList (LinkList L) {

LNode *p;

p=L->next;

while(p!=NULL) {

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

//链式有序表的合并

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)

{

LNode *pa=La->next;

LNode *pb=Lb->next;

Lc=La;

LNode *pc=Lc;

while(pa&&pb)

{

if(pa->data<=pb->data)

{

pc->next=pa;

pc=pa;

pa=pa->next;

}

else{

pc->next=pb;

pc=pb;

pb=pb->next;

}

}

pc->next=pa?pa:pb;

delete Lb;

}

//旋转链表

struct LNode* rotateRight(struct LNode* head,int k)

{

if(k==0||head==NULL||head->next==NULL)

return head;

int n=1;

struct LNode* tail=head;

while(tail->next !=NULL)

{

tail=tail->next;

n++;

}

int movenum=k%n;

if(movenum==0)

return head;

tail->next=head;

int addnum=n-movenum;

while(addnum--)

tail=tail->next;

struct LNode* newhead=tail->next;

tail->next=NULL;

return newhead;

}

//分隔链表

struct LNode*partition(struct LNode*head,int x)

{

struct LNode*small=(struct LNode*)malloc(sizeof(struct LNode ));

struct LNode*large=(struct LNode*)malloc(sizeof(struct LNode ));

struct LNode*pa=head;

struct LNode*pb=small;

struct LNode*pc=large;

while(pa!=NULL)

{

if(pa->val < x)

{

pb->next=pa;

pb=pb->next;

}

else{

pc->next=pa;

pc=pc->next;

}

pa=pa->next;

}

pc->next=NULL;

pb->next=large->next;

struct LNode* newhead = small->next;

return newhead;

}

//翻转链表

struct LNode* reverseKGroup(struct LNode* head,int k)

{

int x=k;

int n=0;

struct LNode* s =(struct LNode*)malloc(sizeof(struct LNode));

struct LNode* cur=s;

struct LNode* slow=head;

struct LNode* fast=NULL;

struct LNode* prev=NULL;

while(slow)

{

n++;

slow=slow->next;

}

slow=head;

n/=k;

for(int i=0;i<n;i++)

{

while(x)

{

fast=slow->next;

slow->next=prev;

prev=slow;

slow=fast;

x--;

}

cur->next=prev;

while(cur->next)

cur=cur->next;

prev=NULL;

x=k;

}

cur->next=slow;

struct LNode* newhead=s->next;

return newhead;

}

int main()

{

cout << "--- 测试 1: 合并有序链表 ---" << endl;

LinkList La, Lb, Lc;

cout << "创建链表 A (需有序): ";

CreateList_H(La, 3);

cout << "创建链表 B (需有序): ";

CreateList_H(Lb, 3);

MergeList_L(La, Lb, Lc);

cout << "合并结果: ";

PrintList(Lc);

cout << endl;// --- 测试 2: 旋转链表 ---

cout << "--- 测试 2: 旋转链表 ---" << endl;

LinkList L_rotate;

cout << "创建用于旋转的链表: ";

CreateList_H(L_rotate, 5);

int k_rot = 2;

cout << "向右旋转 " << k_rot << " 位后的结果: ";

LNode* res_rot = rotateRight(L_rotate->next, k_rot);

// 临时打印

LNode* temp = res_rot;

while(temp) { cout << temp->data << " "; temp = temp->next; }

cout << endl;

cout << endl;

// --- 测试 3: 分隔链表 ---

cout << "--- 测试 3: 分隔链表 (以 3 为界) ---" << endl;

LinkList L_part;

cout << "创建用于分隔的链表: ";

CreateList_H(L_part, 5); // 例如输入 3 1 4 1 5

LNode* res_part = partition(L_part->next, 3);

temp = res_part;

while(temp) { cout << temp->data << " "; temp = temp->next; }

cout << endl;

cout << endl;

// --- 测试 4: K 个一组翻转 ---

cout << "--- 测试 4: K 个一组翻转 (k=2) ---" << endl;

LinkList L_rev;

cout << "创建用于翻转的链表: ";

CreateList_H(L_rev, 5); // 例如输入 1 2 3 4 5

LNode* res_rev = reverseKGroup(L_rev->next, 2);

temp = res_rev;

while(temp) { cout << temp->data << " "; temp = temp->next; }

cout << endl;

return 0;

}

http://www.cnnetsun.cn/news/3113385.html

相关文章:

  • 094 目录 黄大年茶思屋“难题揭榜”第94期——长江会战第四期 全条目整理
  • plymouth-theme-kiran与其他Plymouth主题对比:为什么它是KylinSec最佳选择
  • PostgreSQL中的插件管理
  • 基于YOLOv8的摩托车头盔佩戴检测系统实现:从模型训练到GUI部署全流程解析
  • Hermes-Agent :Windows 环境完整安装与 API 中转配置
  • GLM5、千问Coder、Kimi2.5:程序员真实编码场景下的AI模型选型指南
  • Java计算机毕设之基于 SpringBoot 的线上法律援助服务管理系统的设计与实现 基于 SpringBoot 的律师预约咨询与订单管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • AsrTools:零门槛语音转文字,让音频处理变得如此简单
  • Python基础数据结构详解
  • Cobalt Strike流量溯源实战:从网络取证到攻击链还原
  • 北京华恒智信为教培行业搭建动态定编体系
  • 【Java课程设计/毕业设计】基于 SpringBoot 的高校学生组织综合运维管理系统的设计与实现 校园学生组织资料与活动一体化管理系统【附源码、数据库、万字文档】
  • Python异步编程实战:构建高并发AI API调用管线
  • 质量好的全屋定制厂商名声
  • 3种完整授权方案深度探讨:Beyond Compare 5授权管理技术实现指南
  • AI接管场站运营,某新能源企业将问题发现到解决时间缩短60%
  • 合规链游开发指南:依托区块链技术打造自主可控的沉浸式虚拟世界
  • Dify 与 Chatbox、Anything LLM API
  • ML模型服务化实战:生产稳定性与可观测性落地指南
  • 【Java毕业设计】基于 SpringBoot 的大学生选课偏好分析与推荐系统的设计与实现 融合协同过滤算法的个性化课程推荐平台(源码+文档+远程调试,全bao定制等)
  • Java国密SM2算法实战:从Bouncy Castle集成到加解密签名完整实现
  • 多维聚合实战:从OLAP立方体到语义层的全链路解析
  • 从生成视频到交互仿真,地瓜机器人 Uranus 模型实现帧级闭环
  • 欧朋浏览器推新防护功能,可防“点击修复”攻击!
  • 一洽小程序接入
  • 搭建微信电商小程序要多少钱:定制和SaaS商城怎么选更适合实体店
  • 具身智能仿真器选型与ROS2实战:MuJoCo/Gazebo/Isaac Sim深度解析
  • 红外积分球探测气体验证设备选型:300℃溶剂气化温度配制标气技术解析
  • 中间继电器到底干什么用的?90%的新手没搞懂
  • [CTF] rootme靶场-Polybius