美文网首页
单链表的冒泡排序

单链表的冒泡排序

作者: b6aed1af4328 | 来源:发表于2016-10-08 20:27 被阅读712次

    使用链表实现了冒泡排序,哈哈。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    
    struct node//定义结构体node
    {
      int data;
      struct node *next;
    };
    typedef struct node Lnode;//类型定义 typedef
    typedef struct node* linklist;
    
    Lnode * createNewNode(int value);
    linklist  createEmptyList(void);
     Lnode  *insertat(struct  node *p,int value);
    int insertFromHead(linklist list,int values[],size_t size);
    Lnode *getbyorder(linklist l,int i);
    
    void main()
    {
    // typedef (struct node) Lnode;
     Lnode *p,*s,*q;
     int values[100];
     int i=-1;
     int *a=values;
     while(values[i]!=2000000)//取2000000作为终止输入条件
     {
     i++;
     scanf("%d",&values[i]);
      }
    
      //卡在这里了,我去。
    
     printf("%d\n",i);
     int num=i;
    // int values[10]={1,2,3,5,45,56,67,78,365,454};
     linklist l=createEmptyList();
     int *v=values;
     insertFromHead(l,v,num);
     
     for(i=1;i<num+1;i++)//链表L有值为0的头节点,i从1开始。
         {
          s=getbyorder(l,i);
          printf("%d\n",s->data);
        }
        int j=0;
        for(i=1;i<num+1;i++)
        {
    /*      for(j=1;j<5-1;j++)
            {
               s=getbyorder(l,j);
               q=s->next;
               if(s->data>q->data)
               {
                   int tmp=s->data;
                    s->data=q->data;
                    q->data=tmp;
               }
            }*/
            for(j=i+1;j<num+1;j++)
            {
            s=getbyorder(l,j);
            q=getbyorder(l,i);
            if(s->data<q->data)
            {
              int tmp=s->data;
                 s->data=q->data;
                 q->data=tmp;
    
            }
    
    
    
            }
    
    
    
    
    
        }
        for(i=1;i<=num;i++)
        {
          s=getbyorder(l,i);
          printf("%d\n",s->data);
    
        }
    }
    
    
    
    Lnode *createNewNode(int value)
    {
    Lnode *p=NULL;
    p=(struct node*)malloc(sizeof(struct node));
    if(p==NULL)
      return p;
      p->data=value;
     // q->next=p;
      p->next=NULL;
      return p;
    }
    
    
    
    linklist createEmptyList(void)
    {
    return createNewNode(0);
    
    }
    
    
    Lnode  *insertat(struct node  *p,int value)
    {
    struct node *q=(struct node*)malloc(sizeof(struct node));
    q->next=p->next;
    p->next=q;
    q->data=value;
    return q;
    }
    
    
    
    int insertFromHead(linklist list,int values[],size_t size)
    {
    int i;
    int success=0;
    Lnode *ret=NULL;
    for(i=0;i<size;i++)
    {
    ret=insertat(list,values[i]);
    if(ret!=NULL)
    //printf("%d %d\n",ret->data,values[i]);
    success++;
    }
    return success;
    }
    
    
    Lnode *getbyorder(linklist l,int i)
    {
    Lnode *p=l;
    int j=0;
    while((p->next!=NULL)&&(j<i))
    {
    p=p->next;
    j++;
    }
    if(j==i)
    return p;
    else
    return NULL;
    }
    

    相关文章

      网友评论

          本文标题:单链表的冒泡排序

          本文链接:https://www.haomeiwen.com/subject/lntpyttx.html