数据结构之线性表的静态单链表存储结构(应用求集合(A-B)&&(B-A))
2016-09-26 17:33
459 查看
线性表的静态单链表存储结构(应用求集合(A-B)&&(B-A))
运行截图:
源代码:
运行截图:
源代码:
//运行环境:VS2015 //(A-B)&&(B-A) //头文件 #include "stdafx.h" #include<stdio.h> //宏定义 #define MAXSIAZE 100 #define OK 1 //定义结构体 typedef struct { int data; int cursor; }componet, SLinkList[MAXSIAZE]; //查找元素的位序 int locateSListElem(SLinkList S, int e) { //在静态单链线性表S中查找第一个值为e的元素 //若查找到,则返回其在S中的位序,否则返回0 int i = S[0].cursor; while (i&&S[i].data != 0) { i = S[i].cursor; } return i; } //初始化 int initSListSpace(SLinkList &space) { //将一维数组space各个分量链成一个备用链表,space[0].cursor为头指针 //0表示空指针 for (int i = 0; i <MAXSIAZE-1; i++) { space[i].cursor = i + 1; } space[MAXSIAZE - 1].cursor = 0; return OK; } //分配空间 int mallocSList(SLinkList &space) { //若备用链表非空,则返回分配的节点下标,否则返回0 int i = space[0].cursor; if (space[0].cursor) { space[0].cursor = space[i].cursor; } return i; } //回收节点 int freeSList(SLinkList &space, int k) { //将下标为k的空闲节点回收到备用链表中 space[k].cursor = space[0].cursor; space[0].cursor = k; return OK; } //求集合中的不同元素的并集 int difference(SLinkList &space, int &S) { //依次输入集合A和B的元素,一维数组space中建立表示集合(A-B)&&(B-A)的静态链表, //S为其头指针。假设备用空间足够大,space[0].cursor为其头指针 initSListSpace(space); S = mallocSList(space); int r = S;//r指向S的最后节点 int m, n; printf("输入集合A和B中元素的个数:"); scanf_s("%d%d", &m,&n); printf("请输入集合A:"); for (int j = 1; j <= m; j++) { int i = mallocSList(space); scanf_s("%d", &space[i].data); space[r].cursor = i; r = i; } space[r].cursor = 0; printf("请输入集合B:"); for ( int j = 1;j <= n;j++) { int b; scanf_s("%d", &b); int p = S; int k = space[S].cursor; while (k!=space[r].cursor&&space[k].data!=b) { p = k; k = space[k].cursor; } if (k==space[r].cursor) { int i = mallocSList(space); space[i].data=b; space[i].cursor = space[r].cursor; space[r].cursor = i; } else { space[p].cursor = space[k].cursor; freeSList(space, k); if (r == k)r = p; } } return OK; } //测试 int main() { SLinkList S; int n; initSListSpace(S); difference(S, n); printf_s("(A-B)&&(B-A)={"); for(int i=S .cursor;;i=S[i].cursor) { printf_s("%d ", S[i].data); if (!S[i].cursor)break; } printf_s("}\n"); return 0; }
相关文章推荐
- 数据结构之线性表-链式存储之静态链表(二)
- 线性结构的两种常见应用之一 栈 (存储数据的结构)
- 线性表的静态单链表存储结构
- C语言 数据结构 线性表 单链表 线性表的链式存储结构之一
- 数据结构——线性表(一)线性表的顺序存储和单链表
- JAVA数据结构之线性表的链式存储结构——单链表
- 数据结构之线性结构-链表的应用(求两个一元多项式之和)
- 数据结构之线性表——链表的顺序存储(数组描述)
- 线性表的静态单链表存储结构
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
- 数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示
- [SDUT](2116)数据结构实验之链表一:顺序建立链表 ---链式存储(线性表)
- 数据结构之线性表——链表的链式存储(链式描述)
- 数据结构——线性表的伪链表存储(顺序存储链式遍历)
- 数据结构——线性表之链表存储学习
- 线性表的静态单链表存储结构
- 数据结构之线性表——链表的链式存储(链式描述)注释版
- 数据结构之线性结构(连续存储-静态链表篇)
- 数据结构之线性表——链表的顺序存储(数组描述)
- 看数据结构写代码(52) 广义表的扩展线性链表存储表示