📄 linklist.h
字号:
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 + -