⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 区间操作,包括区间的加(将一个区间和另外一个区间合并成新的区间),减(从一个区间中减去另外一个区间而得到新的区间)
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <stdarg.h>
#include <sys/stat.h>
#include <errno.h>

typedef struct tagInterval INTERVAL;
typedef INTERVAL* PINTERVAL;

struct tagInterval{
	unsigned long s;
	unsigned long e;
	PINTERVAL next;
};



PINTERVAL operInterval(PINTERVAL pi, unsigned long start, unsigned long end)
{
	PINTERVAL piTemp,piPre,piCur,piNext;

	if (start==end) return pi;

	piTemp=malloc(sizeof(INTERVAL));
	if(start<end){
		piTemp->s=start;
		piTemp->e=end;
	}
	else{
		piTemp->s=end;
		piTemp->e=start;
	}
	piTemp->next=NULL;

	if(!pi){
		return piTemp;
	}
	
	piPre=pi;
	
	if(piPre->s>start)
	{
		piTemp->next=pi;
		pi=piTemp;
	}
	else{
		piCur=piPre->next;
		while(piCur && (piCur->s<start))
		{
			piPre=piCur;
			piCur=piPre->next;
		}
		if(!piCur)
		{
			piPre->next=piTemp;
		}
		else{
			piTemp->next=piCur;
			piPre->next=piTemp;
		}
	}

	piTemp=pi;

	while(piTemp->next){
		piNext=piTemp->next;
		if(piTemp->s==piNext->s){
			if(piTemp->e<piNext->e){
				piTemp->e=piNext->e;
			}
			piTemp->next=piNext->next;
			free(piNext);
		}
		else if(piTemp->e>=piNext->s){
			if(piTemp->e<piNext->e){
				piTemp->e=piNext->e;
			}
			piTemp->next=piNext->next;
			free(piNext);
		}
		else piTemp=piNext;
	}

	return pi;
}


void printInterval(PINTERVAL pi)
{
	PINTERVAL piTemp;
	
	piTemp=pi;
	while(piTemp){
		printf("(%d,%d)\n",piTemp->s,piTemp->e);
		piTemp=piTemp->next;
	}
	printf("\n");
}

void subInterval(PINTERVAL pi, unsigned long s, unsigned long e)
{
	PINTERVAL piTemp;

	if(!pi){
		printf("(%d,%d)\n",s,e);
		return;
	}

	piTemp=pi;
	if(s<piTemp->s){
		printf("(%d,%d)\n",s,piTemp->s);
	}
	
	while((piTemp->next)&&(piTemp->next->e<e)){
		printf("(%d,%d)\n",piTemp->e,piTemp->next->s);
		piTemp=piTemp->next;
	}
	
	if(piTemp->next){
		if(piTemp->next->s>e){
			printf("(%d,%d)\n",piTemp->e,e);
		}
		else{
			printf("(%d,%d)\n",piTemp->e,piTemp->next->s);
		}
	}
	else{
		printf("(%d,%d)\n",piTemp->e,e);	
	}
}

void writefile(char * buff, unsigned long offset, unsigned long bytes)
{
	unsigned long ret;
	FILE* fp;
	
	fp=fopen("data.tmp","r+");
	fseek(fp,offset,SEEK_SET);
	ret=fwrite(buff,1,bytes,fp);
	if(ret!=bytes){
		printf("write file failed!\n");
	}
	fclose(fp);
}

void createMyFile(unsigned long len)
{
	unsigned char buf[0x0FFF];
	unsigned long quotient,remainder,idx;
	FILE* fp;

	quotient=len>>12;
	remainder=(len & 0x0FFF);

	memset(buf,0,0x0FFF);
	fp=fopen("data.tmp","wb");

	for(idx=0; idx<quotient;idx++){
		fwrite(buf,1,0x0FFF,fp);	
	}
	fwrite(buf,1,remainder,fp);

	fclose(fp);
}

void main(int argc,char * args[])
{
	PINTERVAL pi;
	unsigned char buf[128];
	int i;
	
	pi=NULL;
	//pi=operInterval(pi,0,1);
	pi=operInterval(pi,1,2);
	pi=operInterval(pi,3,5);
	pi=operInterval(pi,4,6);
	pi=operInterval(pi,4,5);
	pi=operInterval(pi,10,11);
	pi=operInterval(pi,9,10);
	pi=operInterval(pi,7,13);
	pi=operInterval(pi,96,123);


	pi=operInterval(pi,14,24);
	pi=operInterval(pi,52,68);
	pi=operInterval(pi,32,56);
	pi=operInterval(pi,27,58);
	pi=operInterval(pi,136,113);

	printInterval(pi);

	subInterval(pi,0,94);

	createMyFile(13120);

	for(i=0;i<99;i+=3){
		memset(buf,i,128);
		writefile(buf,i*128,128);
	}

	for(i=1;i<99;i+=3){
		memset(buf,i,128);
		writefile(buf,i*128,128);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -