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

📄 linklist.h

📁 该包是数据结构的实验软件,来源于合肥工业大学人工智能与数据挖掘实验室,用来实现数据结构.
💻 H
📖 第 1 页 / 共 4 页
字号:
	Mymenu_selectmenu(vstmenu2,pmenu,selectorno);
	if (selectorno)
		if  (Mymenu_issubmenuitem(vstmenu2)){
			Mymenu_disabledispsubmenu(vstmenu2,pmenu->numofmenu / 100);
		    handle_visite2_event(pmenu,visitemodes,sd);
			}
		else return;
	else return;
}

void handle_visite2_mode(vstmdarr &visitemodes,int sd)
{
	do{ 
		handle_visite2_menu(vstmenu2,selectorno,pmenu,visitemodes,sd);
	}while (strcmp(pmenu->menuname,"返回"));
	Mymenu_clearmainmenu(vstmenu2);
	initial_visitemode(visitelinkmodes,sd);
}

void set_vsnode_mode()
{
	handle_visite2_mode(visitelinkmodes,1);
}

void set_vdnode_mode()
{
	handle_visite2_mode(visitelinkmodes,2);
}

void  initial_llist()
{
	word size;
	Into_graph();
	setfillpattern(fillmode,fillcolor); 
	bar(1,1,dndwd,ndhi);
	getimage(1,1,dndwd,ndhi,dnd);  
	getimage(1,1,sndwd,ndhi,snd);
	getimage(1,1,nddtwd-2,ndhi-2,dtfd);
	putimage(1,1,dnd,1);
	Clear_range(0,0,getmaxx(),getmaxy());
	setcolor(forecolor);
	linkcount++;
	int i,j;  
	for(j=0;j<2;j++)
     	for(i=0;i<4;i++)
      		visitelinkmodes[j][i]=onevisitemode;		
}

void  cur_snode_onoff(link p)
{
	setfillpattern(fillmode,fillcolor); 
	bar(1,1,dndwd,ndhi);
	getimage(1,1,dndwd,ndhi,dnd);  
	getimage(1,1,sndwd,ndhi,snd);
	getimage(1,1,nddtwd-2,ndhi-2,dtfd);
	putimage(1,1,dnd,1);
	putimage(p->x,p->y,snd,1);
}

void  cur_dnode_onoff(dulink p)
{	
	setfillpattern(fillmode,fillcolor); 
	bar(1,1,dndwd,ndhi);
	getimage(1,1,dndwd,ndhi,dnd);  
	getimage(1,1,sndwd,ndhi,snd);
	getimage(1,1,nddtwd-2,ndhi-2,dtfd);
	putimage(1,1,dnd,1);
	putimage(p->x,p->y,dnd,1);
}

void disp_snode_data(link p)
{
	char stemp[255];
	putimage(p->x+1,p->y+1,dtfd,0);
	putimage(p->x+1,p->y+1,dtfd,1);
	Convs(p->data,stemp);
	outtextxy(p->x+nddtwd / 2,p->y+ndhi / 2,stemp);
}

void disp_dnode_data(dulink p)
{
	char stemp[255];
	putimage(p->x+ptrwd+1,p->y+1,dtfd,0);
	putimage(p->x+ptrwd+1,p->y+1,dtfd,1);
	Convs(p->data,stemp);
	outtextxy(p->x+ptrwd+nddtwd / 2,p->y+ndhi / 2-3,stemp);
}


void put_snode_data(link &p,datatype x)
{
	p->data=x;  
	disp_snode_data(p);
}

void put_dnode_data(dulink &p,datatype x)
{
	p->data=x;
	disp_dnode_data(p);
}


boolean have_sptr(string title)
{
	sptrlink p;
    if (snum==0) frstsptr=NULL; 
    p=frstsptr;
	while ((p!=NULL)&&(strcmp(p->ptrname,title))) p=p->next;
	if (p!=NULL) return true;
	else return false;
}


void create_sptr(sptrlink &sptr,string title)
{
 	sptrlink p;
 	int l;
	if (snum==0) frstsptr=NULL;
	p=frstsptr;
	while (p!=NULL) 
	   if (strcmp(p->ptrname,title)) p=p->next;
	   else Error("The pointer have exist!");//{ exit} 
	sptr=(sptrlink)malloc(sizeof(struct snodeptr));
	snum=snum+1;
	sptr->next=frstsptr;
	frstsptr=sptr;
	strcpy(sptr->ptrname,title);
	sptr->x=-1;
	sptr->y=-1;
	sptr->ptr=NULL;
	l=20*strlen(sptr->ptrname) / 2;
	outtextxy(l,2,sptr->ptrname);
	getimage(1,1,2*l,9,sptr->fd0); 
	putimage(1,1,sptr->fd0,1);
	Arrow(3,1,3,20);  
	getimage(1,1,5,20,fd1); 
	putimage(1,1,fd1,1);
	Arrow(3,20,3,1);  
	getimage(1,1,5,20,fd2); 
	putimage(1,1,fd2,1);
}

void sptr_point_to(sptrlink &sptr,link sp)
{
	sptrlink p;
	int k,n,l,sg;
	n=0; 
	l=8*strlen(sptr->ptrname) / 2; 
	k=0;
    	if (sp!=NULL){
		p=frstsptr;
	   	while (p!=NULL)
	      {
	      	if (p->ptr==sp) n=n+1;
	      	p=p->next;
	      	k=k+1; 
	      }
	   	if (sptr->x>0) {
	    	putimage(sptr->x,sptr->y,sptr->fd0,1);
			if (sptr->y<sptr->ptr->y) putimage(sptr->x+l,sptr->y+8,fd1,1);
			else putimage(sptr->x+l,sptr->y-20,fd2,1);
	     	}
	    sptr->ptr=sp;
	    sptr->x=sp->x+n / 2*35; 
	    sg=(n / 2)*2-1;
	    sptr->y=sp->y+25*sg-5+(1+sg)*ndhi / 2;
		putimage(sptr->x,sptr->y,sptr->fd0,1);
		if (sg==-1) putimage(sptr->x+l,sptr->y+8,fd1,1);
		else putimage(sptr->x+l,sptr->y-20,fd2,1);
		}
	else { sptr->x=0; sptr->y=0; sptr->ptr=NULL;}
}


void disp_sptr_atsnode(sptrlink &sptr,link sp)
{
	sptrlink p; 
	int k,n,l,sg;
    n=0; 
    l=8*strlen(sptr->ptrname) / 2; 
    k=0;
    if (sp!=NULL) {
    	p=frstsptr;
	    while (p!=NULL)
	      {
	      	if (p->ptr==sp) n=n+1;
	      	p=p->next;
	      	k=k+1;
	      }
	    sptr->ptr=sp;
	    sptr->x=sp->x+n / 2*35;
	    sg=(n / 2)*2-1;
	    sptr->y=sp->y+25*sg-5+(1+sg)*ndhi / 2;
	    putimage(sptr->x,sptr->y,sptr->fd0,1);
		if (sg==-1) putimage(sptr->x+l,sptr->y+8,fd1,1);
		else putimage(sptr->x+l,sptr->y-20,fd2,1);
	 }else{
	 	sptr->x=0; 
	 	sptr->y=0;
	 	sptr->ptr=NULL;
	 }
}

boolean have_dptr(string title)
{
	dptrlink p;
    if (dnum==0) frstdptr=NULL; 
    p=frstdptr;
	while ((p!=NULL)&&(p->ptrname!=title)) p=p->next;
	if (p!=NULL) return true;
	else return false;
 }


void create_dptr(dptrlink &sptr,string title)
{
	dptrlink p;
	int l;
    if (dnum==0) frstdptr=NULL;
    p=frstdptr;
	while (p!=NULL) 
	   if (p->ptrname!=title) p=p->next;
	   else Error("The pointer have exist!");
	sptr=(dptrlink)malloc(sizeof(struct dnodeptr));
	dnum=dnum+1;
	sptr->next=frstdptr;
	frstdptr=sptr;
	sptr->ptrname=title;
	sptr->x=-1;
	sptr->y=-1;
	sptr->ptr=NULL;
	l=20*strlen(sptr->ptrname) / 2;
	outtextxy(l,2,sptr->ptrname);
	getimage(1,1,2*l,9,sptr->fd0);
	putimage(1,1,sptr->fd0,1);
	Arrow(3,1,3,20);  
	getimage(1,1,5,20,fd1); 
	putimage(1,1,fd1,1);
	Arrow(3,20,3,1);  
	getimage(1,1,5,20,fd2); 
	putimage(1,1,fd2,1);
}

void dptr_point_to(dptrlink &sptr,dulink sp)
{
	dptrlink p; 
	int n,l,sg;
	n=0;
	l=8*strlen(sptr->ptrname) / 2;
    if (sp!=NULL){
		p=frstdptr;
	    while (p!=NULL) 
			{if (p->ptr==sp) n=n+1;p=p->next;}
		if (sptr->x>0) {
			putimage(sptr->x,sptr->y,sptr->fd0,1);
			if (sptr->y<sptr->ptr->y) putimage(sptr->x+l,sptr->y+8,fd1,1);
			else putimage(sptr->x+l,sptr->y-20,fd2,1);
			}   
		sptr->ptr=sp;
		sptr->x=sp->x+n / 2*35;
		sg=(n % 2)*2-1;
		sptr->y=sp->y+25*sg-5+(1+sg)*ndhi / 2;
		putimage(sptr->x,sptr->y,sptr->fd0,1);
		if (sg==-1) putimage(sptr->x+l,sptr->y+8,fd1,1);
		else putimage(sptr->x+l,sptr->y-20,fd2,1);
	}else{
		sptr->x=0;
		sptr->y=0;
		sptr->ptr=NULL;
	}
}

void disp_dptr_atdnode(dptrlink &sptr,dulink sp)
{
	dptrlink p; 
	int n,l,sg;
    n=0;
    l=8*strlen(sptr->ptrname) / 2;
    if (sp!=NULL){
    	p=frstdptr;
	    while (p!=NULL)
			{
				if (p->ptr==sp) n=n+1;
				p=p->next;
			}
	    sptr->ptr=sp;
	    sptr->x=sp->x+n / 2*35;
	    sg=(n % 2)*2-1;
	    sptr->y=sp->y+25*sg-5+(1+sg)*ndhi / 2;
		putimage(sptr->x,sptr->y,sptr->fd0,1);
		if (sg==-1) putimage(sptr->x+l,sptr->y+8,fd1,1);
		else putimage(sptr->x+l,sptr->y-20,fd2,1);
		}  
	else {sptr->x=0; sptr->y=0; sptr->ptr=NULL;}
}


void print_llist(link l,boolean nohead)
{
	link p;
	boolean k;
	p=l;
	k=false;
	if (!nohead) p=p->next;
	while ((p!=NULL)&&((p!=l)||!k)){
		printf("%6d",p->data);
		p=p->next;
		k=true; }
	getch();
}

void createlink(link &t)
{
	datatype ch;
	scanf("%d",&ch);
	if (ch==num_of_end)
		t=NULL;
	else{
		if ((t=(link)malloc(sizeof(struct node)))==NULL){printf("the point error!");exit(1);}
		t->data=ch;
		t->next=NULL;
		createlink(t->next);
	}
}

//建立带头结点的单链表
void  create_hsingle_llist(link &l)
{
	Into_graph();
	printf("\n");
	window(1,3,80,8);
	textbackground(BLACK);
	textcolor(WHITE);
	//getchar();
	//getchar();
	printf("  Create Linklist, input the elements in order, end by[-9999]\n");
	if ((l=(link)malloc(sizeof(struct node)))==NULL){
		printf("the linklist creating error!");
		exit(1);
		}
	l->next=NULL;
	createlink(l->next);
	l->data=0;
	l->hvds=false;
	Clear_range(0,0,getmaxx(),getmaxy() / 3);
	gotoxy(1,1);
	comput_sllist_card(l,frstcx,frstcy);
}


void dispose_llist(link &l)
{
	link p,tp;
	p=l;
	if (l!=NULL){
		tp=l->next;
		while  ((tp!=NULL)&&(tp!=l)){
			free(p);
			p=tp;
			tp=tp->next;
			}
	}
}

void drawnil(int x1,int y1)
{
	line(x1,y1-2,x1-2,y1+2);
	line(x1,y1-2,x1+2,y1+2);
}

void comput_snode_card(llink &tt,int frstcx,int frstcy)
{
	llink p=NULL;
	int cx,cy,mx,my;
	p=tt;
	cx=frstcx;
	cy=frstcy;
	mx=getmaxx();
	do{
		p->x=cx;
		p->y=cy;
		p->hvds=false;
		if (cx+2*sndwd+arrlen>mx){
			cx=20;
			cy=cy+3*ndhi;
			}
		else	cx=cx+sndwd+arrlen;
		p=p->next;
		}
	while ((p!=NULL) && (p!=tt));
//	ch=getch();
}

void comput_sllist_card(llink &tt,int frstcx,int frstcy)
{
	Into_graph();
	comput_snode_card(tt,frstcx,frstcy);
}

void dis_llist1(llink tp,llink tt,int x1,int y1,boolean nohead,boolean is_first)
{
	char stemp[255];
	if (tt==NULL){  
		drawnil(x1,y1);
	}else{
		if ((tt==tp)&&!is_first){
			Arrowdot(x1,y1,x1+10,y1);
			line(x1+10,y1,x1+10,y1+ndhi*2);
			line(x1+10,y1+ndhi*2,5,y1+2*ndhi);
			line(5,y1+2*ndhi,5,tt->y+6);
			Arrow(5,tt->y+6,tt->x,tt->y+6);
		}else{
			if ((tt->x>x1)&&(abs(tt->y-y1)<2*ndhi)){
				Arrowdot(x1,y1,tt->x,tt->y+ndhi / 2);
			}else{
				if (((tt->x)<x1)&&((tt->y)-y1>2*ndhi)){
					Arrowdot(x1,y1,x1+10,y1);
					line(x1+10,y1,x1+10,y1+ndhi*2);
					line(x1+10,y1+ndhi*2,tt->x-10,y1+2*ndhi);
					line(tt->x-10,y1+2*ndhi,tt->x-10,tt->y+6);
					Arrow(tt->x-10,tt->y+6,tt->x,tt->y+6);
				}
			}
	  		if (!tt->hvds){
				rectangle(tt->x,tt->y,tt->x+sndwd,tt->y+ndhi);
				line(tt->x+nddtwd,tt->y,tt->x+nddtwd,tt->y+ndhi);
				if ((!is_first)||(nohead)){
					Convs(tt->data,stemp);
					outtextxy(tt->x+nddtwd / 2,tt->y+ndhi / 2 - 3,stemp);
				}else{
					setfillstyle(3, getcolor());
					bar(tt->x+1,tt->y+1,tt->x+nddtwd-1,tt->y+ndhi-1);
				}
				tt->hvds=true;
				dis_llist1(tp,tt->next,tt->x+nddtwd+4,tt->y+6,nohead,false);
			}
		}
	}
}

void dis_sllist(string s,llink tt,boolean nohead)
{
	int xl,yl,xr,yr;
	for(j=0;j<2;j++)
		for(i=0;i<4;i++)
			visitelinkmodes[j][i]=onevisitemode;
	if (tt!=NULL){
		clear_sllink_range(tt);
		sllink_range(tt,xl,yl,xr,yr);
		rectangle(xl,yl,xr,yr);
		xl=frstcx;	yl=frstcy;
		frstcx=tt->x;  	frstcy=tt->y;
		rectangle(frstcx-20,frstcy-20,frstcx-12,frstcy+ndhi-20);
		outtextxy(frstcx-16,frstcy-29,s);
		dis_llist1(tt,tt,frstcx-16,frstcy+4-20,nohead,true);
		comput_snode_card(tt,frstcx,frstcy);
		frstcx=xl;	frstcy=yl;
	}else{
		rectangle(frstcx-20,frstcy-20,frstcx-12,frstcy+ndhi-20);
		outtextxy(frstcx-16,frstcy-29,s);
		drawnil(frstcx-16,frstcy-20+ndhi / 2);
	}
	//ch=getch();
}


void disp_sllisthd(string s,llink tt,boolean havehead)
{
	if (havehead)
		dis_sllist(s,tt,false);
	else  dis_sllist(s,tt,true);
}

void  display_llist_from(string s,link &l,boolean nohead,int x,int y)
{
	int x1,y1;
	x1=frstcx;
	y1=frstcy;
	frstcx=x;
	frstcy=y;
	comput_snode_card(l,x,y);
	dis_sllist(s,l,nohead);
	getch();
	frstcx=x1;
	frstcy=y1;
}

void  display_llist(string s, link &l, boolean nohead)
{
	Into_graph();
	comput_snode_card(l,frstcx,frstcy);
	dis_sllist(s,l,nohead);
	getch();
}

void  disp_card_sllist(string s,llink l,boolean havehead,int x,int y)
{
	comput_sllist_card(l,x,y);
	disp_sllisthd(s,l,havehead);
}


void display_hsingle_llist(string s,link l)
{
	display_llist(s,l,false);
}

void display_single_llist(string s,link l)
{
	display_llist(s,l,true);
}

void  display_cchsingle_llist(string s,link l)
{
	display_llist(s,l,false);
}

void display_ccsingle_llist(string s,link l)
{
	display_llist(s,l,true);
}

void display_hsllist(string s,link l)
{
	display_llist(s,l,false);
}

void display_sllist(string s,link l)
{
 	display_llist(s,l,true);
}

void  display_cchsllist(string s,link l)
{
	display_llist(s,l,false);
}

void display_ccsllist(string s,link l)
{
	display_llist(s,l,true);
}

//建立带头结点的单链表
void  create_hsllist(link &tt)
{
	create_hsingle_llist(tt);
}


void  create_sllist(link &l)
{
	create_single_llist(l);
}

void  create_cchsllist(link &l)
{
	create_cchsingle_llist(l);
}

void  create_ccsllist(link &l)
{
	create_ccsingle_llist(l);
}

void  create_single_llist(link &l)
{
	link p;
	create_hsingle_llist(l);
	p=l;
	l=l->next;
	free(p);
	comput_sllist_card(l,frstcx,frstcy);
}

void  create_cchsingle_llist(link &l)
{
	link p;
	create_hsingle_llist(l);  
	p=l;
    while (p->next!=NULL)  p=p->next;
    p->next=l;
    comput_sllist_card(l,frstcx,frstcy);
}

void  create_ccsingle_llist(link &l)
{
	link p;
	create_cchsingle_llist(l);
    if (l->next==l)  free(l);
    else{
    	p=l->next;
    	l->data=p->data;
    	l->hvds=false;
  	  	l->next=p->next;
  	  	free(p);
      	}
    comput_sllist_card(l,frstcx,frstcy);
}

void  disp_hsllist(string s,link l)
{
	disp_sllisthd(s,l,true);
}

void  disp_sllist(string s,link l)
{
	disp_sllisthd(s,l,false);
}

void  disp_cchsllist(string s,link l)
{
	disp_sllisthd(s,l,true);
}

void  disp_ccsllist(string s,link l)
{
	disp_sllisthd(s,l,false);
}

void  disp_hdllist(string s,dulink l)

⌨️ 快捷键说明

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