-----------------------------------------------第一次发代码,写在前面------------------------------------------------------

思路不完全等同于严师太的课本,所以代码并不是参照课本。

代码参照《大话数据结构》相应章节,并经过了相应修改

注意:链表下标为i的节点和链表中第i个节点在链表初始化后是一样的,但是在经过删除操作后不一样了。

为此本人在这里浪费了很多时间调试。注意细节。

代码可有某些地方有瑕疵,但是通过了C::B跑了几组数据,应该没大问题。

共同学习,共同进步!

-----------------------------------------------以下摘自《大话数据结构》----------------------------------------------------

在静态链表中,每一个结点包含两部分内容,一部分是data(即有意义的数据),另一部分是cur(存储该元素下一个元素所在数组对应的下标)。

有几个特殊的结点:

首先是下标为0的结点中不包含有意义的数据,它的cur存储的是备用链表(即没有存储的数据的那些结点)第一个结点的下标。如上图2所示,数组第一个元素的cur存放的是7。

其次是数组最后一个元素,数组最后一个元素的cur存放的是静态链表的第一个结点的下标(此处的第一个结点,是指有实质意义的数据的结点)。

最后就是链表的最后一个元素(并不一定是数组的最后一个元素),链表最后一个元素的cur一般存放0,表示它后面的结点为空了。

---------------------------------------------代码如下---------------------------------------------------------

 #include <iostream>

 using namespace std;

 #define MAXSIZE 100

 typedef struct
{
int data;
int cur;
}component,SLinkList[MAXSIZE]; int InitSpace_SL(SLinkList& space)
{
for(int i=;i<MAXSIZE-;i++) space[i].cur=i+;
space[MAXSIZE-].cur=;
return ;
} int LocateElem_SL(SLinkList &S,int e)//在静态链表中查找第一个值为e的元素,若找到,则返回它在线性表中的位序,否则返回0;
{
int i=S[MAXSIZE-].cur;
while(i&&S[i].data!=e)
i=S[i].cur;
if(!i) return ;
else return i;
} int ListLength_SL(SLinkList& L)
{
int j=;
int i=L[MAXSIZE-].cur;
while(i)
{
i=L[i].cur;
j++;
}
return j;
} int Malloc_SL(SLinkList &space)
{
int i=space[].cur;
if(space[].cur) space[].cur=space[i].cur;
return i;
} int Free_SL(SLinkList &space,int k)//把下标为k的空闲节点回收到备用链表,该节点成为备用链表中的首节点
{
space[k].cur=space[].cur;
space[].cur=k;
return ;
} int ListInsert_SL(SLinkList &L,int i,int e)//在L中第i个元素之前插入新的元素e
{
int j,k,l;
k=MAXSIZE-;//k为数组最后一个元素的下标
if(i<||i>ListLength_SL(L)+) return ;
j=Malloc_SL(L);
if(j)//L不为空表
{
L[j].data=e;
for(l=;l<=i-;i++)
k=L[k].cur;
L[j].cur=L[k].cur;
L[k].cur=j;
}
return ;
} int ListInsert2_SL(SLinkList &L,int e)//在备用链表表头插入一个元素
{
int i,j=L[MAXSIZE-].cur,k=Malloc_SL(L);
for(i=;i< ListLength_SL(L);i++)
j=L[j].cur;
L[j].cur=k;
L[k].data=e;
L[].cur=L[k].cur;
L[k].cur=;
return ;
} int ListDelete_SL(SLinkList &L,int i)//删除在L中的第i个元素e
{
int j,k;
if(i<||i>ListLength_SL(L)) return ;
k=MAXSIZE-;
for(j=;j<=i-;j++)
k=L[k].cur;
j=L[k].cur;
L[k].cur=L[j].cur;
Free_SL(L,j);
return ;
} int ListDelete2_SL(SLinkList &L,int i)//删除在L中下标为i的元素L[i]
{
int k=L[MAXSIZE-].cur,m=L[k].cur;
int j=L[].cur;
while(m!=i)
{
k=L[k].cur;
m=L[k].cur;
}
L[k].cur=L[m].cur;
L[].cur=i;
L[i].cur=j;
return ;
}
int MergeList_SL(SLinkList &L1,SLinkList &L2)//(A-B)+(B-A)
{
int i=L2[MAXSIZE-].cur;
int m;
while(i)
{
m=;
int j=L1[MAXSIZE-].cur;
while(j)
{
m=LocateElem_SL(L1,L2[i].data);
if(m) {ListDelete2_SL(L1,m);break;}
j=L1[j].cur;
}
if(!m) ListInsert2_SL(L1,L2[i].data);
i=L2[i].cur;
}
return ;
} int main()
{
int m,n,j;
SLinkList L1,L2;
InitSpace_SL(L1);
InitSpace_SL(L2);
cout<<"输入集合A中的元素个数:"<<endl;
cin>>m;
cout<<"输入集合A中各元素的值:"<<endl;
for(int i=;i<=m;i++)
{
cin>>L1[i].data;
L1[].cur=L1[i].cur;
}
L1[m].cur=;
L1[MAXSIZE-].cur=;
cout<<"输入集合B中的元素个数:"<<endl;
cin>>n;
cout<<"输入集合B中各元素的值:"<<endl;
for(int i=;i<=n;i++)
{
cin>>L2[i].data;
L2[].cur=L2[i].cur;L2[MAXSIZE-].cur=;
}
L2[n].cur=;
L2[MAXSIZE-].cur=;
MergeList_SL(L1,L2);
j=L1[MAXSIZE-].cur;
while(j)
{
cout<<L1[j].data<<" ";
j=L1[j].cur;
}
return ;
}

-----XJX

静态链表实现(A-B)+(B-A)【代码】的更多相关文章

  1. 【数据结构】单链表&&静态链表详解和代码实例

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...

  2. 静态链表过程演示及代码实现(A - B) U (B - A)

    静态链表说明 使用数组来实现链式存储结构,目的是方便在不设指针类型的高级程序设计语言中使用链式结构 c语言定义数据结构 #define MAX_SIZE 1000 // 所有的类型都统一定义为Elem ...

  3. 静态链表 C语言描述

    静态链表1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标2.最后一个的节点存放第一个由数值得下标3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标 4. ...

  4. 03静态链表_StaticLinkList--(线性表)

    #include "string.h" #include "ctype.h" #include "stdio.h" #include &qu ...

  5. 静态链表实现 (A-B)U(B-A)

    图中黄色部分为(A-B)U(B-A)的实际意义,用结构数组做静态链表来实现该表达式 大致流程是先建立A链表,接着将挨个输入的B中元素在A链表中遍历.如果没找到,就加到A链表结尾下标为endpointe ...

  6. C链表之创建简单静态链表

    C代码: #include<stdio.h> #include<stdlib.h> #include<malloc.h> //创建简单静态链表 typedef st ...

  7. 【Java】 大话数据结构(3) 线性表之静态链表

    本文根据<大话数据结构>一书,实现了Java版的静态链表. 用数组描述的链表,称为静态链表. 数组元素由两个数据域data和cur组成:data存放数据元素:cur相当于单链表中的next ...

  8. cf-Round541-Div2-F(并查集+静态链表)

    题目链接:http://codeforces.com/contest/1131/problem/F 思路: 很容易看出这是一道并查集的题目,因为要输出每个cage中住的鸟的编号,故采用静态链表.用l[ ...

  9. 数据结构6: 静态链表及C语言实现

    本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...

随机推荐

  1. HTTP基础知识(二)

    接着上一章的内容:HTTP基础知识(一)   二.简单的HTTP协议 1.客户端:请求访问文本或图像等资源的一端称为客户端: 服务器端:提供资源响应的一端   2.以百度为例子 这是请求头: 在起始行 ...

  2. 每天一个linux命令30)--chgrp命令

    在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理.可以使用chgrp 指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以. chgrp 命令就是change  gr ...

  3. C#的for循环使用方法

    for循环是程序语言开发中常见的技法之一,这类循环可以执行指定的次数,并维护它自己的计数器,要定义for循环,需要下述信息:1.初始化计数器变量的一个起始值;2.继续循环的条件,它应涉及到计数器变量; ...

  4. Python 之 json 模块

    引言 对于做web开发的人来说,json文本必须要熟知与熟练使用的.大部分网站的API接口调用返回的数据,就是json格式的.如果看json对象所包含的内容,相信对熟悉Python的人开说,很快就能把 ...

  5. 3892: [Usaco2014 Dec]Marathon

    3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 169  Solved: 100[Submi ...

  6. CLR查找和加载程序集的方式(二) 流程图

    在前一篇文章<CLR查找和加载程序集的方式(一)>中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式. 本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查 ...

  7. Oracle-函数大全

    ORACLE函数大全 1. 第一讲 单行函数和组函数详解 PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为 ...

  8. linux虚拟机安装演示

    做为一名linux初学者来说,在本机上安装linux虚拟机做为平时练习工具极为重要,此方式在充分体验linux操作乐趣的同时,又能保证不破坏已经配置好的服务器.所以虚拟机是一种很好的学习工具了.下面总 ...

  9. 解决Antimalware Service Executable CPU占用高听语音

    windows8/8.1,WIN10自带的安全软件Windows defender还不错,基本可以不用装其他杀毒软件了. 但是其进程Antimalware Service Executable 出现C ...

  10. ubuntu查看安装的cuda toolkit自带的工具及其他安装文件

    原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5253672.html 1.查看工具 默认目录为:local,进入local:cd /usr/loc ...