静态链表实现(A-B)+(B-A)【代码】
-----------------------------------------------第一次发代码,写在前面------------------------------------------------------
思路不完全等同于严师太的课本,所以代码并不是参照课本。
代码参照《大话数据结构》相应章节,并经过了相应修改
注意:链表下标为i的节点和链表中第i个节点在链表初始化后是一样的,但是在经过删除操作后不一样了。
为此本人在这里浪费了很多时间调试。注意细节。
代码可有某些地方有瑕疵,但是通过了C::B跑了几组数据,应该没大问题。
共同学习,共同进步!
-----------------------------------------------以下摘自《大话数据结构》----------------------------------------------------
在静态链表中,每一个结点包含两部分内容,一部分是data(即有意义的数据),另一部分是cur(存储该元素下一个元素所在数组对应的下标)。
有几个特殊的结点:
首先是下标为0的结点中不包含有意义的数据,它的cur存储的是备用链表(即没有存储的数据的那些结点)第一个结点的下标。如上图2所示,数组第一个元素的cur存放的是7。
其次是数组最后一个元素,数组最后一个元素的cur存放的是静态链表的第一个结点的下标(此处的第一个结点,是指有实质意义的数据的结点)。
最后就是链表的最后一个元素(并不一定是数组的最后一个元素),链表最后一个元素的cur一般存放0,表示它后面的结点为空了。
---------------------------------------------代码如下---------------------------------------------------------
1 #include <iostream> 2 3 using namespace std; 4 5 #define MAXSIZE 100 6 7 typedef struct 8 { 9 int data; 10 int cur; 11 }component,SLinkList[MAXSIZE]; 12 13 14 int InitSpace_SL(SLinkList& space) 15 { 16 for(int i=0;i<MAXSIZE-1;i++) space[i].cur=i+1; 17 space[MAXSIZE-1].cur=0; 18 return 0; 19 } 20 21 22 int LocateElem_SL(SLinkList &S,int e)//在静态链表中查找第一个值为e的元素,若找到,则返回它在线性表中的位序,否则返回0; 23 { 24 int i=S[MAXSIZE-1].cur; 25 while(i&&S[i].data!=e) 26 i=S[i].cur; 27 if(!i) return 0; 28 else return i; 29 } 30 31 32 int ListLength_SL(SLinkList& L) 33 { 34 int j=0; 35 int i=L[MAXSIZE-1].cur; 36 while(i) 37 { 38 i=L[i].cur; 39 j++; 40 } 41 return j; 42 } 43 44 45 int Malloc_SL(SLinkList &space) 46 { 47 int i=space[0].cur; 48 if(space[0].cur) space[0].cur=space[i].cur; 49 return i; 50 } 51 52 53 int Free_SL(SLinkList &space,int k)//把下标为k的空闲节点回收到备用链表,该节点成为备用链表中的首节点 54 { 55 space[k].cur=space[0].cur; 56 space[0].cur=k; 57 return 0; 58 } 59 60 int ListInsert_SL(SLinkList &L,int i,int e)//在L中第i个元素之前插入新的元素e 61 { 62 int j,k,l; 63 k=MAXSIZE-1;//k为数组最后一个元素的下标 64 if(i<1||i>ListLength_SL(L)+1) return 0; 65 j=Malloc_SL(L); 66 if(j)//L不为空表 67 { 68 L[j].data=e; 69 for(l=1;l<=i-1;i++) 70 k=L[k].cur; 71 L[j].cur=L[k].cur; 72 L[k].cur=j; 73 } 74 return 0; 75 } 76 77 78 int ListInsert2_SL(SLinkList &L,int e)//在备用链表表头插入一个元素 79 { 80 int i,j=L[MAXSIZE-1].cur,k=Malloc_SL(L); 81 for(i=1;i< ListLength_SL(L);i++) 82 j=L[j].cur; 83 L[j].cur=k; 84 L[k].data=e; 85 L[0].cur=L[k].cur; 86 L[k].cur=0; 87 return 0; 88 } 89 90 91 92 int ListDelete_SL(SLinkList &L,int i)//删除在L中的第i个元素e 93 { 94 int j,k; 95 if(i<1||i>ListLength_SL(L)) return 0; 96 k=MAXSIZE-1; 97 for(j=1;j<=i-1;j++) 98 k=L[k].cur; 99 j=L[k].cur; 100 L[k].cur=L[j].cur; 101 Free_SL(L,j); 102 return 0; 103 } 104 105 106 int ListDelete2_SL(SLinkList &L,int i)//删除在L中下标为i的元素L[i] 107 { 108 int k=L[MAXSIZE-1].cur,m=L[k].cur; 109 int j=L[0].cur; 110 while(m!=i) 111 { 112 k=L[k].cur; 113 m=L[k].cur; 114 } 115 L[k].cur=L[m].cur; 116 L[0].cur=i; 117 L[i].cur=j; 118 return 0; 119 } 120 int MergeList_SL(SLinkList &L1,SLinkList &L2)//(A-B)+(B-A) 121 { 122 int i=L2[MAXSIZE-1].cur; 123 int m; 124 while(i) 125 { 126 m=0; 127 int j=L1[MAXSIZE-1].cur; 128 while(j) 129 { 130 m=LocateElem_SL(L1,L2[i].data); 131 if(m) {ListDelete2_SL(L1,m);break;} 132 j=L1[j].cur; 133 } 134 if(!m) ListInsert2_SL(L1,L2[i].data); 135 i=L2[i].cur; 136 } 137 return 0; 138 } 139 140 141 int main() 142 { 143 int m,n,j; 144 SLinkList L1,L2; 145 InitSpace_SL(L1); 146 InitSpace_SL(L2); 147 cout<<"输入集合A中的元素个数:"<<endl; 148 cin>>m; 149 cout<<"输入集合A中各元素的值:"<<endl; 150 for(int i=1;i<=m;i++) 151 { 152 cin>>L1[i].data; 153 L1[0].cur=L1[i].cur; 154 } 155 L1[m].cur=0; 156 L1[MAXSIZE-1].cur=1; 157 cout<<"输入集合B中的元素个数:"<<endl; 158 cin>>n; 159 cout<<"输入集合B中各元素的值:"<<endl; 160 for(int i=1;i<=n;i++) 161 { 162 cin>>L2[i].data; 163 L2[0].cur=L2[i].cur;L2[MAXSIZE-1].cur=1; 164 } 165 L2[n].cur=0; 166 L2[MAXSIZE-1].cur=1; 167 MergeList_SL(L1,L2); 168 j=L1[MAXSIZE-1].cur; 169 while(j) 170 { 171 cout<<L1[j].data<<" "; 172 j=L1[j].cur; 173 } 174 return 0; 175 }
-----XJX
转载于:https://www.cnblogs.com/journal-of-xjx/p/5897654.html
静态链表实现(A-B)+(B-A)【代码】相关推荐
- 【数据结构--静态链表】
文章目录 前言 一.静态链表的定义 结构描述 代码描述 二.静态链表的基本操作 初始化 打印链表 静态链表的插入 静态链表的删除 三.完整代码及运行截图 完整代码如下: 运行截图 四.闵版(略改) 前 ...
- 静态链表(代码、分析、汇编)
目录: 代码: 分析: 汇编: 代码: StaticList.h #ifndef _STATICLIST_H_ #define _STATICLIST_H_typedef void StaticLis ...
- c语言 静态链表插入排序,数据结构 - 表插入排序 具体解释 及 代码(C++)
表插入排序 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24323125 表插入排序(List I ...
- 【C语言X数据结构】用静态链表实现的多项式计算器,加减乘除求导求值,输入输出样样在行!(完整代码+注释)
目录 实验要求 完整代码 逻辑设计 哈喽各位好,我是李博轩,一个刚转到计算机的大二学生.这个标题是随手打上去的,感觉还蛮顺口,就这样了. 这个学期在学[数据结构与算法],而这是我面对的第一个实验题.因 ...
- 《大话数据结构》5一文学会数据结构中的静态链表存储结构(概念,实例,代码)
静态链表 1.静态链表基本介绍 (1)静态链表:用数组来代替指针,来描述单链表.我们把用数组描述下标的链表叫做静态链表.也叫游标实现法. (2)首先让数组的元素是两个数据域组成,data 和cur.也 ...
- 数据结构与算法(2-2)线性表之链式存储(单链表、静态链表、循环链表、双向循环链表)
目录 一.单链表 1.存储方式 2.插入 3.删除 总代码: 二.静态链表 1.存储方式 2.插入 3.删除 4.遍历 总代码: 三.循环链表 总代码: 四.双向循环链表 1.存储方式: 2.插入和删 ...
- java静态链表_数据结构笔记:静态链表(C语言)
void CreateList(StaticLinkList *P)//创建一个静态链表 { int i; for(i=0;i此时并没有已占用空间,所以第一个节点中的指针(cur)的值为1,也就是说空 ...
- 静态链表的插入和删除
静态链表相当于是用一个数组来实现线性表的链式存储结构,在静态链表中操作的是数组. 结构体数组 一.静态链表的插入操作 静态链表的插入操作包含两部分,首先是获得空闲量的下标,程序代码如下; int ge ...
- java静态链表_用Java实现一个静态链表
什么是静态链表? 对于线性链表,也可用一维数组来进行描述.这种描述方法便于在没有指针类型的高级程序设计语言中使用链表结构. 用数组描述的链表,即称为静态链表. 在C语言中,静态链表的表现形式即为结构体 ...
最新文章
- Linux里find和grep命令
- get_locked_objects_rpt.sql
- Drop Table对MySQL的性能影响分析
- 第一篇|腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等
- CentOS7中MongoDB备份与恢复,配置远程访问
- 力扣908.最小差值Ⅰ
- C语言如何调用REFPROP软件,如何用C++6.0调用refprop物性查询软件
- 安装IIS以及配置ASP.NET流程
- Windows 7 Sp1 x64 安装英文语言包
- perform指标分析_Perform+3D-入门实战指导.ppt
- Mac 好用的 Android 模拟器整理(玩游戏、装应用、支持咸鱼、拼多多...)
- List在遍历时修改元素会怎样?——学习笔记
- 基于Java毕业设计弹幕视频网站源码+系统+mysql+lw文档+部署软件
- 利用H5的canvas画一个时钟
- 【PLC编程】西门子工艺对象 – 连续控制器CONT_C的使用
- 关于Introduction、Discussion的杂记
- 发布java包运行提示找不到配置文件
- 《达利之梦》推出APP,带你走进VR超现实画作
- 计算机网络 第四章 答案(更正版)(谢希仁 第七版)
- 空字符导致字符串截断问题
热门文章
- chrome登录_比Chrome还要好用?(全新edge浏览器体验)
- 航空频率表 2020_飞亚达2020时光勋章品牌年会——往昔作序,来日为章
- php写项目,php写web项目
- php for等边三角形,利用js实现等腰三角形
- 云服务器可以安装操作系统么,云服务器能装操作系统吗
- mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
- uefi 嵌入式Linux,面向嵌入式平台的高级UEFI开发环境.PDF
- MySQL如何快速插入数据
- halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建
- Paper1:HoPE: Horizontal Plane Extractor for Cluttered