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

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

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

注意:链表下标为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. ASP.NET通用权限框架 权限管理系统源码jquery 精美UI源码

    软件技术开发,合作请联系QQ:858-048-581 开发工具 VS2010 .sql2005.2008等(在Sql server数据执行脚本即可)  VS2010 打开保证本地运行成功(数据库.源代 ...

  2. MyBatis 源码分析——类型处理器

    官网上面讲到:无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型.那 ...

  3. Java程序员入门:程序员究竟可以干多少年?

    很多人都说程序员是青春饭,只能干到30岁. 然而事实真的如此么? 今天我们来探讨一下这个老话题,看看为了技术与编程执着究竟能走多远? 01年龄分布图 先来看一下程序员的年龄分布图: 我们可以看到程序员 ...

  4. ASP日期格式化函数

    Public Function GetFormatDate(DateAndTime, para)On Error Resume NextDim y, m, d, h, mi, s, strDateTi ...

  5. 使用C#操作文件

    读写文本文件 使用C#读写文本文件需要5个步骤: 1.创建文件流 2.创建阅读器或者写入器 3.执行读写操作 4.关闭阅读器或者写入器 5.关闭文件流 例 using System; using Sy ...

  6. 2761: [JLOI2011]不重复数字(平衡树)

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2133  Solved: 825[Submit][Stat ...

  7. java+++IO流操作

    序:IO流的操作主要分为两种读和写.一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读 ...

  8. Android:百度地图 + 百度导航

    地图SDK 开发指南:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction 导航SDK开发指南:http://lb ...

  9. JavaWeb---javabean

    1.javabean 1.1--javabean的创建方法 1.2-javabean可以使用跟java一样的方法创建javabean实例 创建一个普通类Users(1.共有类 2.私有属性 3.无参构 ...

  10. iOS性能之WebP

    当今互联网,无论网页还是APP,流量占用最大的,多数都是因为图片,越是良好的用户体验,对图片的依赖度越高.但是图片是一把双刃剑,带来了用户体验,吸引了用户注意,却影响了性能,因为网络请求时间会相对比较 ...