笔记静态链表的实现

 #include "stdafx.h"
#include<iostream> using namespace std; #define MAXSIZE 100 typedef int ElemType; typedef struct {
ElemType data;
int cur;
}component,SLinkList[MAXSIZE]; void InitSpace_SL(SLinkList &space) {
for (int i = ; i < MAXSIZE - ; ++i) space[i].cur = i + ;
space[MAXSIZE - ].cur = ;
} int Malloc_SL(SLinkList &space) {
int i = space[].cur;
if (space[].cur) space[].cur = space[i].cur;
return i;
} void Free_SL(SLinkList & space, int k) {
space[k].cur = space[].cur; space[].cur = k;
} void difference(SLinkList &space, int &S) {
InitSpace_SL(space); //初始化备用空间
S = Malloc_SL(space); //生成S的头结点
int r = S;
cout << "请输入A,B集合的元素个数,用空格隔开" << endl;
int m, n;
cin >> m >> n;
int i, j;
cout << "请依次输入A集合的元素并按回车" << endl;
int nn;
//给A集合添加数据
for (j = ; j <= m; ++j) {
i = Malloc_SL(space); //取出下一个空间索引
cin>>nn; //赋值
space[i].data = nn;
space[r].cur = i; //尾插法(r指向的是最后一个结点,让上一次最后结点指向i索引)
r = i; //r指向最后的节点
} space[r].cur = ; //将最后一个结点指向空(也就是0)
printf("请依次输入B集合的元素\n");
int b;
int p;
int k;
for (j = ; j <= n; ++j) {
cin >> b; //读取并记录到临时变量b
p = S; //记录头结点
k = space[S].cur; //k指向第一个结点
while (k != space[r].cur && space[k].data != b) {
p = k;
k = space[k].cur; //指向下一个结点
}
if (k == space[r].cur) { //不存在元素b,插入到r所指结点之后
i = Malloc_SL(space);
space[i].data = b;
space[i].cur = space[r].cur;
space[r].cur = i;
}
else { //存在元素b,删除
space[p].cur = space[k].cur;
Free_SL(space, k);
if (r == k) r = p;
}
}
//指回头指针
space[].cur = S; } void Show_SL(SLinkList &space) {
printf("链表的打印结果是\n");
int s = Malloc_SL(space); //指向头结点
while (space[s].cur != ) {
s = Malloc_SL(space);
cout << space[s].data<<" ";
}
cout << endl;
} int main() {
SLinkList sl;
int s;
difference(sl, s);
Show_SL(sl);
system("pause");
return EXIT_SUCCESS;
}

实现效果如下:

学习自 严蔚敏的《数据结构》静态链表

最新文章

  1. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
  2. mysql创建新用户并分配数据库权限
  3. 重读C#委托、事件有感
  4. iOS-浅谈runtime运行时机制-runtime简单使用(转)
  5. Java基础集锦——利用Collections.sort方法对list排序
  6. SlickGrid example 5:带子项的展开收缩
  7. 主引导记录MBR
  8. ssh 内在溢出
  9. 改变xmind显示中文界面
  10. HDU 3271-SNIBB(数位dp)
  11. FZU 2212 Super Mobile Charger 第六届福建省赛
  12. redmine安装插件流程
  13. 将EXCEL中的列拼接成SQL insert插入语句
  14. mysql相关日志汇总
  15. 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码
  16. 二)Spring AOP编程思想与动态代理
  17. Python多线程的运行及time.sleep()的应用
  18. Linux防火墙开启关闭查询
  19. python虚拟环境搭建
  20. redis数据持久化的两种方式

热门文章

  1. 同一客户端多个git账号的配置
  2. 关于Object.create方法
  3. vue项目一个页面使用多个轮播图详解
  4. parse_str()和http_build_query()的使用
  5. linux性能分析工具Vmstat
  6. smbumount - 为普通用户卸载smb文件系统
  7. 第五节:从一条记录说起——InnoDB记录结构
  8. Sass--传多个参数
  9. java 继承访问成员变量
  10. setenv和dos2unix碰到的问题