使用链表实现了冒泡排序,哈哈。
#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;
}
网友评论