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

📄 link.c

📁 此程序在WinTC下编译
💻 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 + -