《数据结构》2.5-将链表A分解成B和C

2024-02-16 10:58

本文主要是介绍《数据结构》2.5-将链表A分解成B和C,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*
设计一个算法,将带头结点的单链表A分解成两个结构相同的单链表B和C
使得B中的元素是A中大于等于0的元素,C中的元素是A中小于0的元素。
要求存储空间仍使用A的存储空间。 
*/#include<stdio.h>
typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;/*
初始化单链表 
*/
int InitList(LinkList &L){L=new LNode;L->next=NULL;return 1;
}//创建链表 
void CreateList(LinkList &L,int n){L=new LNode;L->next=NULL;for(int i=0;i<n;i++){printf("请输入第%d个元素的值:",i+1);struct LNode *p;p=new LNode;scanf("%d",&p->data);p->next=L->next;L->next=p;}
}//遍历 
void TraveList(LinkList L){struct LNode *p;p=L->next;while(p){printf("%d ",p->data);p=p->next;}printf("\n");
}void CutList(LinkList &A,LinkList &B,LinkList &C){struct LNode *pa,*pb,*pc;pa=A->next;//B=C=A;B=new LNode;C=new LNode;B->next=NULL;C->next=NULL;pb=B;pc=C;while(pa){if(pa->data>=0){pb->next=pa;pa=pa->next;pb=pb->next;pb->next=NULL;//这一句不能少 }else if(pa->data<0){pc->next=pa;pa=pa->next;pc=pc->next;pc->next=NULL;//不能少 }} 
}int main(){LinkList A,B,C;if(InitList(A)){printf("链表A初始化成功!\n");}else{printf("链表A初始化失败!\n");}if(InitList(B)){printf("链表B初始化成功!\n");}else{printf("链表B初始化失败!\n");}if(InitList(C)){printf("链表C初始化成功!\n");}else{printf("链表C初始化失败!\n");}printf("请输入链表A的长度:");int n1;scanf("%d",&n1);CreateList(A,n1);printf("链表A的结构如下:\n");TraveList(A);CutList(A,B,C);printf("B链表的结构如下:\n");TraveList(B);printf("C链表的结构如下:\n");TraveList(C);return 0; 
}

这篇关于《数据结构》2.5-将链表A分解成B和C的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714331

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

最便宜的8口2.5G网管交换机! 水星SE109 Pro拆机测评

《最便宜的8口2.5G网管交换机!水星SE109Pro拆机测评》水星SE109Pro价格很便宜,水星SE109Pro,外观、接口,和SE109一样,区别Pro是网管型的,下面我们就来看看详细拆... 听说水星SE109 Pro开卖了,PDD卖 220元,于是买回来javascript拆机看看。推荐阅读:水

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输