读书人

程序的运行结果有有关问题请大家给修

发布时间: 2012-08-16 12:02:15 作者: rapoo

程序的运行结果有问题,请大家给修改一下错误,谢谢!
下面的程序不能得到排序的目的,请高手们给修改指点一下,谢谢了:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 6 // 链表的长度

// 定义链表结点
typedef struct node
{
int data;
struct node *next;
}Node, *Nodeptr;

//创建链表
Nodeptr CreatLink()
{
Nodeptr l, p, q;
int j;
l=(Nodeptr)malloc(sizeof(Node));
l->next=NULL;
q=l;
for(j=1;j<=M;j++)
{
p=(Nodeptr)malloc(sizeof(Node));
p->data=rand()%100;
q->next=p;
q=p;
}
q->next=NULL;
return (l);
}

// 输出链表
void OutPut(Nodeptr l)
{
Nodeptr p;
p=l->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

// 用选择排序法对链表排序
void SelectSort(Nodeptr l)
{
Nodeptr p, q, r;
int t;
for(p=l->next;p->next !=NULL;p=p->next)
{
r=p;
for(q=p->next;q!=NULL;q=q->next)
if(q->data < p->data)
r=q;
if(r!=p)
{
t=p->data;
p->data=r->data;
r->data=t;
}
}
}

void main()
{
Nodeptr t;
srand((unsigned)time(NULL));
t=CreatLink();

printf("链表在排序之前输出为:\n");
OutPut(t);
printf("\n");

SelectSort(t);

printf("链表排好序后输出为:\n");
OutPut(t);
}

[解决办法]
错误出在着
if(q->data < p->data)
r=q;
将其改为:
if(q->data < r->data)
r = q;
[解决办法]

探讨
错误出在着
if(q->data < p->data)
r=q;
将其改为:
if(q->data < r->data)
r = q;

读书人网 >C语言

热点推荐