news 2026/7/3 4:57:19

线性表的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性表的应用
  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;

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 4:54:45

PostgreSQL中的插件管理

PG 内核本身不包含所有扩展的文件&#xff0c;许多发行版将扩展拆分为独立包&#xff0c;仅安装 postgresql-server是不够的&#xff0c;启用插件之前需要在宿主机上*-contrib软件包&#xff0c;但是安装*-contrib软件包的话&#xff0c;需要使用到pgdg仓库没有则需要先部署仓库…

作者头像 李华
网站建设 2026/7/3 4:53:21

Hermes-Agent :Windows 环境完整安装与 API 中转配置

一、引言最近在体验一款名为 Hermes-Agent​ 的开源 AI 智能体框架&#xff0c;由 Nous Research 出品。它最大的亮点是免训练即可赋予大模型操作电脑的能力&#xff08;浏览器自动化、代码执行、文件管理、消息网关等&#xff09;&#xff0c;底层支持 300 模型&#xff0c;包…

作者头像 李华
网站建设 2026/7/3 4:53:16

GLM5、千问Coder、Kimi2.5:程序员真实编码场景下的AI模型选型指南

1. 这不是模型对比&#xff0c;是编程工作流的实战选择题最近在几个技术群和本地开发者聚会上&#xff0c;几乎每天都有人抛出同一个问题&#xff1a;“GLM5、千问Coder、Kimi2.5&#xff0c;写代码到底该用哪个&#xff1f;”——注意&#xff0c;没人问“哪个参数量更大”或“…

作者头像 李华