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