SCAU 数据结构 1 单链表分解
描述
设计算法将一个带头结点的单链表A分解为两个具有头结点的链表B、C,其中B表的结点为A表中值大于等于零的结点,
而C表的结点为A表中值小于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点,即B,C表不能新建结点.只能新建一个头结点)。
线性链表的基本操作如下:
#include
#include
#define ERROR 0
#define OK 1
#define ElemType int
typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
Status ListInsert_L(LinkList &L, int i, ElemType e) { // 算法2.9
// 在带头结点的单链线性表L的第i个元素之前插入元素e
LinkList p,s;
p = L;
int j = 0;
while (p && j < i-1) { // 寻找第i-1个结点
p = p->next;
++j;
}
if (!p || j > i-1) return ERROR; // i小于1或者大于表长
s = (LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data = e; s->next = p->next; // 插入L中
p->next = s;
return OK;
} // LinstInsert_L
Status ListDelete_L(LinkList &L, int i, ElemType &e) { // 算法2.10
// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkList p,q;
p = L;
int j = 0;
while (p->next && j < i-1) { // 寻找第i个结点,并令p指向其前趋
p = p->next;
++j;
}
if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并释放结点
e = q->data;
free(q);
return OK;
} // ListDelete_L
输入格式
第一行:输入单链表A的表长
第二行:输入单链表A中的数据,中间用空格隔开
输出格式
第一行:依次输出A表的数据元素,中间用空格隔开
第一行:依次输出B表的数据元素,中间用空格隔开
第一行:依次输出C表的数据元素,中间用空格隔开
输入样例
8
1 -1 2 -3 3 4 -5 8
输出样例
A:1 -1 2 -3 3 4 -5 8
B:1 2 3 4 8
C:-1 -3 -5
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define ElemType inttypedef int Status;typedef struct LNode
{int data;struct LNode *next;
}LNode,*LinkList;Status CreateLink_L(LinkList &L,int n)
{LinkList p,s;int i;ElemType e;L=new LNode;L->next=NULL;p=L;for(i=0;i<n;i++){scanf("%d",&e);s=new LNode;s->data=e;s->next=NULL;p->next=s;p=s;}return OK;
}Status CreateEmptyLink_L(LinkList &L)
{L=new LNode;L->next=NULL;return OK;
}Status ListInsert_L(LinkList &L,int i,ElemType e)
{LinkList p,s;int j=1;p=L;while(p&&j<i){p=p->next;j++;}if(!p||j>i) return ERROR;s=new LNode;s->data=e;s->next=p->next;p->next=s;return OK;
}Status ListDelete_L(LinkList &L,int i,ElemType &e)
{LinkList p,s;int j=1;p=L;while(p->next&&j<=i){s=p;p=p->next;j++;}if(!(p->next)||j>i) return ERROR;e=p->data;s->next=p->next;delete p;return OK;
}Status LoadLink_L(LinkList &L)
{LinkList p=L->next;if(p==NULL) printf("The List is empty!");else{while(p!=NULL){printf("%d ",p->data);p=p->next;}}printf("\n");return OK;
}Status SwitchList_L(LinkList &LA, LinkList &LB,LinkList &LC)
{LinkList pa,pb,pc,sa,sb,sc;pa=LA->next;pb=LB;pc=LC;while(pa!=NULL){if((pa->data)>=0){sb=new LNode;sb->data=pa->data;sb->next=NULL;pb->next=sb;pb=sb;pa=pa->next;}else{sc=new LNode;sc->data=pa->data;sc->next=NULL;pc->next=sc;pc=sc;pa=pa->next;}}return OK;
}int main()
{LinkList A,B,C;int n;scanf("%d",&n);CreateLink_L(A,n);CreateEmptyLink_L(B);CreateEmptyLink_L(C);SwitchList_L(A,B,C);printf("A:");LoadLink_L(A);printf("B:");LoadLink_L(B);printf("C:");LoadLink_L(C);
}
SCAU 数据结构 1 单链表分解相关推荐
- 数据结构:单链表中在P结点前插入S结点
标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...
- 基本的数据结构:单链表(Singly Linked List)
一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...
- Java数据结构——用单链表编写一个简易通讯录
Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...
- 【数据结构】单链表的实现
文章目录 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 1.3 链表的实现 1. 4 结尾 1. 链表 之前我们实现了顺序表,接下来来学习链表,并且理解顺序表和链表的区别 1.1 链表的概 ...
- 数据结构:单链表——带头结点与不带头结点步骤详解
单链表:带头结点与不带头结点详解 在本人的另一篇文章中,通过java实现了带头结点和不带头结点的单链表,有兴趣的小伙伴可以去看下数据结构(一):链表(Linked List) 这两天回顾下链表的知识, ...
- 【C数据结构】单链表的实现以及链表和顺序表的优缺点
文章目录 一.链表和顺序表的相辅相成 二.认识链表的最简单结构(单链表) 1.单链表的结构: 2.单链表的简单操作实现: (1).提前准备(头文件和测试源文件) (2).单链表的头插.尾插与创建一个新 ...
- 大家一起学数据结构之单链表
最近工作上得一些感触,要想不当码农学好数据结构是必须滴. 好了,话不多说,下面开始第一个内容 单链表 一.先来介绍下单链表得结构吧 大概就这样了,别嫌丑. 单链表有带头结点得和不带头结点得,其中每个节 ...
- python数据结构之单链表
今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的.文后附链表操作示意图. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. ...
- 数据结构之单链表 python实现
链表是线性表的链式存取的数据结构,是一种链式存取的数据结构,是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点 ...
最新文章
- 高校10余位博士抱着孩子参加授位仪式萌翻全场!科研人抱娃毕业成趋势?
- NodeJS中的循环陷阱
- 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
- IDEA如何像ecplise一样添加jar包?
- 王道 —— 操作系统的运行机制和体系结构
- 【电脑使用】插入SD卡图标是灰色的,点击显示“请将磁盘插入驱动器”
- 【Excel 教程系列第 5 篇】查找重复值
- 时序分析 29 - 时序预测 - 格兰杰因果关系(下) python实践2
- Spring Boot实践 | 利用Spring Security快速搞定权限控制
- 26种英语形容词后缀讲解
- mac下hadoop环境的搭建
- Linux常用命令速查手册——嘎嘎管用
- CAD2010 为了保护_【行业资讯】多相复合保护层制备高稳定锂金属负极
- Access数据库——Cookie注入
- HIT计算机系统大作业-程序人生-Hello’s P2P
- JAVA项目的目录结构分析
- c语言中 5.1lf什么意思,期货股指lf_中金所期货指数IF、IH、IC分别是什么英文单词的缩写_期货攻略网...
- button设置为disabled
- AUTOCAD2007安装过程中遇到的问题以及解决方法
- timenote时光笔记+android,timenote(时光笔记)
热门文章
- IDE报错 hdc_std version of the SDK does not match the hdcd version of the device.
- 美国知名科技博客简介
- (FAQ)VM log是做什么的,4 Way VM又是什么
- MetaFormer-3
- 如何在Django中优雅的使用pyecharts设计可视化BI系统(多图表)
- 用计算机弹猴哥,《西游记》孙悟空获“弼马温”一职,网友弹屏吐槽:猴哥被忽悠了...
- 在数组对象中取出对应属性的值
- greasemonkey 使用心得
- vcruntime140_1.dll丢失的解决方法(仅一招解决)
- dz论坛在线咨询使用不了,解决办法