双向链表插入排序

/*
 * func.c
 *
 *  Created on: 2012-12-5
 *      Author: Administrator
 */

#include "head.h"
void Initialize(pList p)
{
    p->head=NULL;
    p->size=0;
}
int CreatMyllist(pList p)
{
    peop q;

    puts("请输入 id(!0) data name");
    while(1)
    {
        if(    p->size==0)
        {
             peop pep=(peop)malloc(sizeof(ele));
             pep->next=NULL;

             scanf("%d%d%s",&pep->id,&pep->data,pep->ch);
               if(pep->id==0)
               {  free(pep);
               break;
               }
             p->head=pep;
             q=p->head;
             p->size++;
        }

        else
        {
            peop pep=(peop)malloc(sizeof(ele));
            pep->next=NULL;
               scanf("%d%d%s",&pep->id,&pep->data,pep->ch);
                           if(pep->id==0)
                           {  free(pep);
                           break;
                           }
            q->next =pep;
            q=q->next;
            p->size++;
        }
        puts("请输入 id (!0)data name");
    }
    return p->size;
}
void Insertsort(pList p)
{
    peop r,w;
    int i;
    for(i=1;isize;i++)
    {
        int a=i;
        r=p->head;
        while (a--)
        {
            r=r->next;
        }
        w=r->ptr;//r的前一个元素
            while (1)
            {
                if(r->datadata)
                {
                    if(w==p->head)
                    {
                      p->head=r;
                      r->ptr=NULL;
                      w->next=r->next;
                      r->next->ptr=w;
                      r->next=w;
                      w->ptr=r;
                    }
                    else
                    {
                   w->ptr->next=r;
                   r->ptr=w->ptr;
                   w->next=r->next;
                   if(r->next!=NULL)
                       r->next ->ptr=w;
                   r->next=w;
                   w->ptr=r;
                    }
                }
                else
                      r=r->ptr;
                   if(r->ptr==NULL)  break;
                w=r->ptr;
            }
    }
}
int CreatList2(pList p)
{
    peop q;

    puts("请输入data");
    while(1)
    {
        if(    p->size==0)
        {
             peop pep=(peop)malloc(sizeof(ele));
             pep->next=NULL;
             pep->ptr=NULL;
             scanf("%d",&pep->data);
               if(pep->data==0)
               {  free(pep);
               break;
               }
             p->head=pep;
             q=p->head;
             p->size++;
        }

        else
        {
            peop pep=(peop)malloc(sizeof(ele));
            pep->next=NULL;
               scanf("%d",&pep->data);
                           if(pep->data==0)
                           {  free(pep);
                           break;
                           }
            q->next =pep;
            pep->ptr=q;
            q=q->next;
            p->size++;
        }
        puts("请输入data");
    }
    return p->size;

}
int add(pList p)
{
    peop pep=(peop)malloc(sizeof(ele));
    peop q=p->head;
    while(q->next!=NULL)
    {
        q=q->next;
    }
    puts("请输入 id (!0)data name");
    if(scanf("%d%d%s",&pep->id,&pep->data,pep->ch)==3)
    {
        q->next=pep;
        p->size++;
        return 1;
    }
    else
        return 0;

}
void print(pList p)
{
    peop q;
    q=p->head;

  while (q!=NULL)
  {
      printf("%d\t%d\t%s\n",q->id,q->data,q->ch);
      q=q->next;
  }

}
int  delete(pList p,int i)
{
    peop q,w;
     q=p->head;
     if(q->id==i)
     {
         p->head=q->next;
        free(q);
        return 1;
     }
     while ((w=q->next)!=NULL)
      {
         if(w->id==i)
         {
        q->next=w->next;
        free(w);
        return 1;
         }
      }
    return 0;
}
int insert(pList p,int num)
{
      peop q=p->head;
      if(num<0||num>p->size)
          return -1;
      else
      {     peop pep=(peop)malloc(sizeof(ele));
        puts("请输入 id (!0)data name");
              scanf("%d%d%s",&pep->id,&pep->data,pep->ch);
              p->size++;
          if(num==0)
          {
                  pep->next=q;
                  p->head=pep;
                   puts("插入成功");
                    return 1;
          }
          else{
              int a=num-1;
              while(a--)
                  q=q->next;
              pep->next=q->next;
              q->next=pep;
              puts("插入成功");
              return 1;

          }

      }
      puts("插入失败");
   return 0;
}
void modify()
{

}



你可能感兴趣的:(双向链表插入排序)