创建集合A,集合B。求表达式(A-B)U(B-A)的值。
来源:互联网 发布:微博抽奖软件 编辑:程序博客网 时间:2024/05/21 03:56
此程序编译时有一点问题,有时可以得到想要的结果,有些数据有事又可以通过测试,想了两三天,还是不得其解。望看过程序的高手们帮下小菜鸟。在此,感激不尽!!!
#include<stdio.h>
//============================//线性静态单链表存储结构
//============================
#define MAXSIZE 1000//链表的最大长度
typedef int ElemType;
typedef struct {
ElemType data;
int cur;
}component,SLinkList[MAXSIZE];
//============================
//创建静态链表
//============================
void InitSpace_SL(SLinkList space)
{ //将一维数组space中各分量链成一个备用链表,space[0].cur为指针头
int i; //"0"表示空指针
for(i=0;i<MAXSIZE-1;++i)
space[i].cur=i+1;
space[MAXSIZE-1].cur=0;
}
//============================
//从备用静态链表中取出一个结点
//============================
int Malloc_SL(SLinkList space)
{ //若分配空间链表非空,则返回分配的结点下标,否则返回0
int i;
i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}
//============================
//将空闲结点插入备用链表中
//============================
void Free_SL(SLinkList space,int k)
{ //将下标为k的空间结点回收到备用链表
space[k].cur=space[0].cur;
space[0].cur=k;
}
//===========================
//求(A-B)U(B-A)
//===========================
void difference(SLinkList space)
{ //依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)U(B-A)
//的静态链表,S为其头指针.假设备用空间足够大,space[0].cur为其头指针.
int S,r,k,p;
int m,n,i,j,b;
InitSpace_SL(space); //初始化备用空间
S=Malloc_SL(space); //生成S的头结点
r=S; //r指向S的当前最后结点
printf("请分别输入集合A和集合B的元素个数:\n");
scanf("%d%d",&m,&n); //输入A和B的元素个数
for(j=1;j<=m;++j) //建立集合A的链表
{
i=Malloc_SL(space); //分配结点
printf("请输入集合A的第%d个元素:\n",i-1);
scanf("%d",&space[i].data); //输入A的元素值
space[r].cur=i; //插入到表尾
r=i;
}
space[r].cur=0; //尾结点的指针域为空
for(j=1;j<=n;++j) //依次输入B的元素,若不在当前表中,则插入,否则删除
{
printf("请输入集合B的第%d个元素:\n",j);
scanf("%d",&b);
p=S;
k=space[S].cur; //k指向集合A的第一个结点
while(k!=space[r].cur&&space[k].data!=b)//在当前的表中查找
{
p=k;
k=space[k].cur;
}
if(k==space[r].cur)//当前表中不存在该元素,插入在r所指结点之后,且r的位置不变
{
i=Malloc_SL(space);
space[i].data=b;
space[i].cur=space[r].cur;
space[r].cur=i;
printf("***************");//测试语句
}
else //该元素已在表中请删除它
{
space[p].cur=space[k].cur;
Free_SL(space,k);
if(r==k)
r=p;//若删除的是r所指结点,则须修改尾指针
printf("===============");//测试语句
}
}
}
//===============================
//打印函数
//===============================
void print(SLinkList space)
{
int i;
for(i=2;space[i].cur!=0;++i)
{
printf("%d\t",space[i].data);
}
printf("%d\t",space[i].data);//输出指针域为0的结点的值
}
//===============================
//主函数
//===============================
void main()
{
SLinkList space;
difference(space);
printf("集合(A-B)U(B-A)={");
print(space);
printf("}\n");
}
- 创建集合A,集合B。求表达式(A-B)U(B-A)的值。
- 求集合{a}+集合{b}的并集
- 求a*b,a+b
- 集合A-B--二分查找
- 集合相减A-B
- 集合A与B的差集
- A、B两个整数集合的交集
- 利用静态链表作集合运算(A-B)U(B-A)
- 静态链表求集合(A-B)∪(B-A)
- 数据结构之线性表的静态单链表存储结构(应用求集合(A-B)&&(B-A))
- 求解集合A和集合B的差集
- a>b?a:b
- 求a+b的程序
- 对比两个集合A和B,删除B中没有的A,新增A中没有的B
- 求A/B高精度值
- 求A/B高精度值
- 求A/B高精度值
- 求GCD(a,b)
- 关于 SHFILEOPSTRUCT
- JavaScript 常见错误
- Sudoku Solver
- PHP 移位运算符
- hdu1285 确定比赛名次 拓扑排序
- 创建集合A,集合B。求表达式(A-B)U(B-A)的值。
- 报错:OLE Error 800A03EC
- android贪吃蛇(超级简陋版)
- html5 svg 第八章 文字text
- Oracle和MySql之前的区别
- 三种继承方式总结
- windows下安装nodejs、 express +、socket.io和redis
- 在delphi中读取Excel数据
- poj1041 John's trip【无向图欧拉回路判定+输出路径】