总是出现写入位置发生冲突,到底是咋回事呢?(线性单链表,一维数组 ,游标)
总是出现写入位置发生冲突,到底是怎么回事呢?(线性单链表,一维数组 ,游标)
源码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1000
typedef struct
{
int data;
int cur;
}component,SLinkList[MAXSIZE];
void InitSpace(SLinkList &space)
{
for(int i = 0;i<MAXSIZE-1;++i) space[i].cur = i+1;
space[MAXSIZE-1].cur = 0;
}
int Malloc(SLinkList &space)
{
int i = space[0].cur;
if(i) space[0].cur = space[i].cur;
return i;
}
void Free(SLinkList &space,int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
void difference(SLinkList &space)
{
InitSpace(space);
int s = Malloc(space);
int r = s;
int m,n;
scanf("%d%d",&m,&n);
for(int i = 0;i < m;++i)
{
int j = Malloc(space);
scanf("%d",space[j].data);
space[r].cur = j;
r = j;
}
space[r].cur = 0;
for(int i = 0;i < n;++i)
{
int b;
scanf("%d",&b);
int p = s;
int k = space[p].cur;
while(k!=space[r].cur&&space[k].data!=b)
{
p = k;k = space[k].cur;
}
if(k==space[r].cur)
{
int j = Malloc(space);
space[j].data = b;
space[j].cur = space[r].cur;
space[r].cur = j;
}
else
{
space[p].cur = space[k].cur;
Free(space,k);
if(r == k) r=p;
}
}
}
int main()
{
SLinkList space;
difference(space);
system("pause");
return 0;
}
------解决方案--------------------
水平有限看着耗费劲,
源码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1000
typedef struct
{
int data;
int cur;
}component,SLinkList[MAXSIZE];
void InitSpace(SLinkList &space)
{
for(int i = 0;i<MAXSIZE-1;++i) space[i].cur = i+1;
space[MAXSIZE-1].cur = 0;
}
int Malloc(SLinkList &space)
{
int i = space[0].cur;
if(i) space[0].cur = space[i].cur;
return i;
}
void Free(SLinkList &space,int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
void difference(SLinkList &space)
{
InitSpace(space);
int s = Malloc(space);
int r = s;
int m,n;
scanf("%d%d",&m,&n);
for(int i = 0;i < m;++i)
{
int j = Malloc(space);
scanf("%d",space[j].data);
space[r].cur = j;
r = j;
}
space[r].cur = 0;
for(int i = 0;i < n;++i)
{
int b;
scanf("%d",&b);
int p = s;
int k = space[p].cur;
while(k!=space[r].cur&&space[k].data!=b)
{
p = k;k = space[k].cur;
}
if(k==space[r].cur)
{
int j = Malloc(space);
space[j].data = b;
space[j].cur = space[r].cur;
space[r].cur = j;
}
else
{
space[p].cur = space[k].cur;
Free(space,k);
if(r == k) r=p;
}
}
}
int main()
{
SLinkList space;
difference(space);
system("pause");
return 0;
}
------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1000
typedef struct
{
int data;
int cur;
}component, SLinkList[MAXSIZE];
void InitSpace(SLinkList &space)
{
for(int i = 0; i<MAXSIZE-1; ++i)
space[i].cur = i+1;
space[MAXSIZE-1].cur = 0;
}
int Malloc(SLinkList &space)
{
int i = space[0].cur;
if(i)
space[0].cur = space[i].cur;
return i;
}
void Free(SLinkList &space, int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
void difference(SLinkList &space)
{
InitSpace(space);
int s = Malloc(space);
int r = s;
int m, n;
scanf("%d%d",&m,&n);
for(int i = 0;i < m;++i)
{
int j = Malloc(space);
scanf("%d",space[j].data); // 首先这就有错 改为 scanf("%d",&space[j].data);
space[r].cur = j;
r = j;
}
space[r].cur = 0;
for(int i = 0;i < n;++i)
{
int b;
scanf("%d",&b);
int p = s;
int k = space[p].cur;
while(k!=space[r].cur&&space[k].data!=b)
{
p = k;k = space[k].cur;
}
if(k==space[r].cur)
{
int j = Malloc(space);
space[j].data = b;
space[j].cur = space[r].cur;
space[r].cur = j;
}
else
{
space[p].cur = space[k].cur;
Free(space,k);
if(r == k) r=p;
}
}
}
int main()
{
SLinkList space;
difference(space);
system("pause");
return 0;
}
水平有限看着耗费劲,