1.静态链表的初始化 2.malloc()函数实现 3.静态链表长度 4.静态链表的插入操作 5.free()函数实现 6.静态链表的删除操作 7.求集合运算(A-B)U(B-A) 由终端输入集合元素,先建立表示集合A的静
1.静态链表的初始化
2.malloc()函数实现
3.静态链表长度
4.静态链表的插入操作
5.free()函数实现
6.静态链表的删除操作
7.求集合运算(A-B)U(B-A)
由终端输入集合元素,先建立表示集合A的静态链表S,而后输入集合B的元素
同时查找S表,若存在和B相同的元素则从S表中删除之,否则将此元素插入S表。
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#include<stdio.h>
typedef char ElemType;
typedef int Status;
typedef struct
{
ElemType data;
int cur;
}Component,SLinkList[MAXSIZE];
Status InitList(SLinkList space)
{
int i;
for(i=0;i<MAXSIZE-1;i++)
{
space[i].cur=i+1;
}
space[MAXSIZE-1].cur=0;
return OK;
}
int Malloc_SL(SLinkList space)
{
int i;
i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}
int ListLength(SLinkList L)
{
int j=0;
int i;
i=L[MAXSIZE-1].cur;
while(i)
{
i=L[i].cur;
j++;
}
return j;
}
Status ListInsert(SLinkList L,int i,ElemType e)
{
int j,k,l;
k=MAXSIZE-1;
if(i<1||i>ListLength(L)+1)
return ERROR;
j=Malloc_SL(L);//获得空闲分量的下标
if(j)
{
L[j].data=e;
for(l=1;l<=i-1;l++)
k=L[k].cur;
L[j].cur=L[k].cur;
L[k].cur=j;
return OK;
}
return ERROR;
}
int Free_SL(SLinkList space,int k)
{
space[k].cur=space[0].cur;
space[0].cur=k;
return 0;
}
Status ListDelete(SLinkList L,int i)
{
int j,k;
if(i<1||i>ListLength(L))
return ERROR;
k=MAXSIZE-1;
for(j=1;j<=i-1;j++)
k=L[k].cur;
j=L[k].cur;
L[k].cur=L[j].cur;
Free_SL(L,j);
return OK;
}
void difference(Component *space,int *s){
int r,i,j,p,k;
int m,n;
char ch;
InitList(space);
*s=Malloc_SL(space);
r=*s;
scanf("%d%d",&m,&n);
for(j=1;j<=m;j++)
{
i=Malloc_SL(space);
scanf("%c",&space[i].data);
space[r].cur=i;
r=i;
}
space[r].cur=0;
for(j=1;j<=n;j++)
{
scanf("%c",&ch);
p=*s;
k=space[*s].cur;
while(k!=space[r].cur&&space[k].data!=ch)
{
p=k;
k=space[k].cur;
}
if(k==space[r].cur)
{
i=Malloc_SL(space);
space[i].data=ch;
space[i].cur=space[r].cur;
space[r].cur=i;
}
else
{
space[p].cur=space[k].cur;
Free_SL(space,k);
if(r==k) r=p;
}
}
}
int main()
{
SLinkList sl;
int x,y;
Component p;
difference(sl,&x);
y=sl[x].cur;
while(y)
{
printf("%c",sl[y].data);
y=sl[y].cur;
}
return 0;
}