总是出现写入位置发生冲突,到底是怎么回事呢?(线性单链表,一维数组 ,游标)

coincidenceWQ 2014-01-15 12:31:19
源码
#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;
}
...全文
181 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coincidenceWQ 2014-02-01
  • 打赏
  • 举报
回复
该函数是实现(A-B)并(B-A)的,多谢各位,特别是3楼,就是那么一个小小错。。感谢5楼的赵老师的教导
赵4老师 2014-01-15
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
gogiqp_jyh 2014-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u010800064 的回复:

#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;
}
水平有限看着耗费劲,
// 首先 scanf("%d",space[j].data) 就有错 改为 scanf("%d",&space[j].data);
gogiqp_jyh 2014-01-15
  • 打赏
  • 举报
回复

#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;
}
水平有限看着耗费劲,
richyhuang 2014-01-15
  • 打赏
  • 举报
回复
能不能把函数想实现的目的简单说明一下, 比如different函数是坐什么用的,有什么问题
大奶兔白糖 2014-01-15
  • 打赏
  • 举报
回复
楼主?写入位置冲突是什么意思呢?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧