70,023
社区成员




#include<stdio.h>
struct test
{
char a;
int cur;
};
void InitSpace(struct test *space)
{
int i;
for (i = 0; i < 100-1; i++)
{
space[i].cur = i + 1;
}
space[100 - 1].cur = 0;
}
int Malloc(struct test *space)
{
int i;
i = space[0].cur;
if (space[0].cur)
space[0].cur = space[i].cur;
return i;
}
void Free(struct test *space, int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
int different(struct test *space)
{
InitSpace(space);
int S,r, i, m, n,b,p,k;
int j;
S = Malloc(space);
r = S;
scanf("%d", &m); //A的个数
scanf("%d", &n); //B的个数
for (j = 1; j <= m; j++)
{
i = Malloc(space);
scanf("%c", &space[i].a);
space[r].cur = i;
r = i;
}
space[r].cur = 0;
for (j = 1; j <= n; j++)
{
scanf("%c", &b);
p = S;
k = space[S].cur;
while (k != space[r].cur&&space[k].a != b)
{
p = k;
k = space[k].cur;
}
if (k == space[r].cur)
{
i = Malloc(space);
space[i].a = b;
space[i].cur = space[r].cur;
space[r].cur = i;
}
else
{
space[p].cur = space[k].cur;
Free(space, k);
if (r == k)
r = p;
}
}
return S;
}
void print(struct test *space,int S)
{
int p = space[S].cur;
while (p)
{
printf("%c\n", space[p].a);
}
}
int main()
{
struct test space[100];
int S;
S=different(space);
print(space, S);
}
#include<stdio.h>
struct test
{
int a;
int cur;
};
void InitSpace(struct test *space)
{
int i;
for (i = 0; i < 100 - 1; i++)
{
space[i].cur = i + 1;
}
space[100 - 1].cur = 0;
}
int Malloc(struct test *space)
{
int i;
i = space[0].cur;
if (space[0].cur)
space[0].cur = space[i].cur;
return i;
}
void Free(struct test *space, int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
int different(struct test *space)
{
InitSpace(space);
int S, r, i, m, n, b, p, k;
int j;
S = Malloc(space); //S申请头结点
r = S; //r指向非备用链表的尾点
scanf("%d", &m); //A的个数
scanf("%d", &n); //B的个数
for (j = 1; j <= m; j++)
{
i = Malloc(space);
scanf("%d", &space[i].a);
space[r].cur = i; //连接新申请的结点
r = i; //更新尾结点
}
space[r].cur = 0; //最后结点为零
for (j = 1; j <= n; j++)
{
scanf("%d", &b);
p = S; //p为k的上一个结点
k = space[S].cur; //k指向头结点下一结点
while (k != space[r].cur&&space[k].a != b) //直到k指向尾结点之后或者在A中找到和A相同的
{
p = k;
k = space[k].cur;
}
if (k == space[r].cur) //当前表中不存在该元素,插入r结点之后
{ //r的位置不变,因为r值的是A,意味着A的查询结束
i = Malloc(space);
space[i].a = b;
space[i].cur = space[r].cur;
space[r].cur = i;
}
else //该元素已在表中,删除之
{
space[p].cur = space[k].cur;
Free(space, k);
if (r == k) //修改尾指针
r = p;
}
}
return S;
}
void print(struct test *space, int S)
{
int p = space[S].cur;
while (p)
{
printf("%d\n", space[p].a);
p = space[p].cur;
}
}
int main()
{
struct test space[100];
int S;
S = different(space);
print(space, S);
}
自己解决了,谢谢大家的帮助