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

单链表的冒泡排序

作者: 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