描述
设计算法将一个带头结点的单链表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 单链表分解相关推荐

  1. 数据结构:单链表中在P结点前插入S结点

    标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...

  2. 基本的数据结构:单链表(Singly Linked List)

    一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...

  3. Java数据结构——用单链表编写一个简易通讯录

    Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...

  4. 【数据结构】单链表的实现

    文章目录 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 1.3 链表的实现 1. 4 结尾 1. 链表 之前我们实现了顺序表,接下来来学习链表,并且理解顺序表和链表的区别 1.1 链表的概 ...

  5. 数据结构:单链表——带头结点与不带头结点步骤详解

    单链表:带头结点与不带头结点详解 在本人的另一篇文章中,通过java实现了带头结点和不带头结点的单链表,有兴趣的小伙伴可以去看下数据结构(一):链表(Linked List) 这两天回顾下链表的知识, ...

  6. 【C数据结构】单链表的实现以及链表和顺序表的优缺点

    文章目录 一.链表和顺序表的相辅相成 二.认识链表的最简单结构(单链表) 1.单链表的结构: 2.单链表的简单操作实现: (1).提前准备(头文件和测试源文件) (2).单链表的头插.尾插与创建一个新 ...

  7. 大家一起学数据结构之单链表

    最近工作上得一些感触,要想不当码农学好数据结构是必须滴. 好了,话不多说,下面开始第一个内容 单链表 一.先来介绍下单链表得结构吧 大概就这样了,别嫌丑. 单链表有带头结点得和不带头结点得,其中每个节 ...

  8. python数据结构之单链表

    今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的.文后附链表操作示意图. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. ...

  9. 数据结构之单链表 python实现

    链表是线性表的链式存取的数据结构,是一种链式存取的数据结构,是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点 ...

最新文章

  1. 高校10余位博士抱着孩子参加授位仪式萌翻全场!科研人抱娃毕业成趋势?
  2. NodeJS中的循环陷阱
  3. 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
  4. IDEA如何像ecplise一样添加jar包?
  5. 王道 —— 操作系统的运行机制和体系结构
  6. 【电脑使用】插入SD卡图标是灰色的,点击显示“请将磁盘插入驱动器”
  7. 【Excel 教程系列第 5 篇】查找重复值
  8. 时序分析 29 - 时序预测 - 格兰杰因果关系(下) python实践2
  9. Spring Boot实践 | 利用Spring Security快速搞定权限控制
  10. 26种英语形容词后缀讲解
  11. mac下hadoop环境的搭建
  12. Linux常用命令速查手册——嘎嘎管用
  13. CAD2010 为了保护_【行业资讯】多相复合保护层制备高稳定锂金属负极
  14. Access数据库——Cookie注入
  15. HIT计算机系统大作业-程序人生-Hello’s P2P
  16. JAVA项目的目录结构分析
  17. c语言中 5.1lf什么意思,期货股指lf_中金所期货指数IF、IH、IC分别是什么英文单词的缩写_期货攻略网...
  18. button设置为disabled
  19. AUTOCAD2007安装过程中遇到的问题以及解决方法
  20. timenote时光笔记+android,timenote(时光笔记)

热门文章

  1. IDE报错 hdc_std version of the SDK does not match the hdcd version of the device.
  2. 美国知名科技博客简介
  3. (FAQ)VM log是做什么的,4 Way VM又是什么
  4. MetaFormer-3
  5. 如何在Django中优雅的使用pyecharts设计可视化BI系统(多图表)
  6. 用计算机弹猴哥,《西游记》孙悟空获“弼马温”一职,网友弹屏吐槽:猴哥被忽悠了...
  7. 在数组对象中取出对应属性的值
  8. greasemonkey 使用心得
  9. vcruntime140_1.dll丢失的解决方法(仅一招解决)
  10. dz论坛在线咨询使用不了,解决办法