📄 link.c
字号:
/*链表的演示
2006.4.30
熊小辉
*/
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
//双链表的定义
typedef struct link
{ int dat; //数值
struct link *right,*left; //左右指针
int num; //num 表示数值所在的位置
}linkx,*linky;
void init(void);
void close(void);
void initlist(void);
void plink(linky first,int n);
void main(void)
{
init(); //图形初始化
initlist(); //动态的建立链表
close(); //关闭图形
}
//图形才驱动==============================================================
void init(void)//图形的初始话
{ int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"");
setbkcolor(0);
cleardevice();
}
//关闭图形函数=================================================================
void close(void)
{ getch();
closegraph();
}
//动态的建立链表================================================================
void initlist(void)
{ linky head,p,q,s;
int j=4,n=0;
char str[5],str1[5];
//randomizs();
setcolor(j++);
outtextxy(250,20,"put any key to continue");
getch();
head=s=(linky)malloc(sizeof(linkx));
s->dat=random(100);
s->num=n;
sprintf(str,"%d",s->dat);
setcolor(4);
outtextxy(50+n*20,50,str);
//sleep(1);
s->right=NULL;
s->left=NULL;
plink(s,n) ;
n++;
while(n!=20)
{ s=(linky)malloc(sizeof(linkx));
s->dat=random(100);
sprintf(str,"%d",s->dat);
setcolor(j++);
outtextxy(50+n*20,50,str);
getch();
p=head;
if(s->dat<=head->dat)
{ s->right=head; //插入头接点
s->left=NULL;
s->num=0;
head->left=s;
head=s;
q=head->right;
while(q!=NULL)
{ q->num++;
q=q->right;
}
plink(head,n) ;
}//end if;
else
{ while(s->dat>p->dat&&p!=NULL)
{ q=p;
p=p->right; //逐个比较大小
}
if(p==NULL) //表示在最尾端
{
q->right=s;
s->right=NULL; //插入尾接点
s->left=q;
s->num=n;
plink(head,n) ;
}
else
{ s->dat=s->dat;
s->right=q->right;
q->right->left=s;
q->right=s;
s->left=q;
/*
s->left=p->left;
p->left->right=s;
s->right=p; // 中间插入的方法
p->left=s;
*/
s->num=q->num+1;
s=s->right;
while(p!=NULL)
{ p->num++;
p=p->right;
}
plink(head,n);
}
} //end else
n++;
}//end while
}//end initlist;
//显示表==========================================================
void plink(linky first,int n)
{ int k=5;
char str[5];
while(first!=NULL)
{ sprintf(str,"%d",first->dat); //显示各个值
setcolor(k);
outtextxy(50+20*first->num,100+n*20,str);
first=first->right;
k=k+1;
if(k==14)
k=5;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -