一个普通简单的写法,也比较笨的,用位数组来标志元素。
要算到2^30次方,空间太浪费。如果非要用add(min,max),把p设成全局的
程序代码:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
struct s
{
unsigned char t:1;
};
void Add(struct s *p,int v1,int v2)
{
int i=0;
while(i++<v1) p++;
while(v1<v2)
{
p->t=1;
v1++;p++;
}
}
void Delete(struct s *p,int v1,int v2)
{
int i=0;
while(i++<v1) p++;
while(v1<=v2)
{
p->t=0;
v1++;p++;
}
}
void print(struct s *p,int len)
{
int i=0;
while(i<len)
{
int t=i;
while(i<len && p->t==1)
{
i++;
p++;
}
if((p-1)->t==1) printf("(%d,%d)",t,i<len?i-1:i);
i++;p++;
}
}
int main()
{
int len=(int)pow(2,30)/8;
struct s *p=(struct s*)malloc(len);
if(p==NULL)
{
printf("memory error\n");
return 1;
}
memset(p,0,len);
int v1,v2;
while(1)
{
printf("1: add(),2: delete(),3 break;\n");
int num;
puts("select:");
scanf("%d",&num);
if(num==3) break;
puts("input the range:");
scanf("%d%d",&v1,&v2);
switch(num)
{
case 1:Add(p,v1,v2);break;
case 2:Delete(p,v1,v2);break;
}
}
puts("print:");
print(p,len);
free(p);
return 0;
}