具體闡述,我在做一個鏈表,分別呼叫三個函式,一個是創建數表函式,一個是排序函式,一個是輸出函式,想達到的效果是,輸入資料,按成績排序。以下是我寫的程式。最后一張為執行錯誤的截圖,求高手指出錯誤并糾正,以達到預期效果,謝謝您了!
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
void sort(struct student mm[], int n);
struct student * creatlist(struct student *head);
void print (struct student *pp);
struct student
{
char name[20];
int sc;
struct student *next;
};
int n=0;
int main (void)
{
struct student *head;
head=creatlist(head);
sort(head,n);
print(head);
return 0;
}
struct student * creatlist(struct student * head)
{
char a;
struct student *p1,*p2;
p2 = (struct student *)malloc(sizeof(struct student));
p1=p2;
do
{
if(n!=0)
{
p1->next=p2;
p1=p2;
}
++n;
printf("請輸入第%d個學生的姓名:", n);
scanf("%s", p2->name);
printf("請輸入第%d學生的成績:", n);
scanf("%d", &(*p2).sc);
if (n=1)
head = p1;
p2= (struct student *)malloc(sizeof(struct student));
printf ("是否繼續輸入?Y/N?");
//scanf ("%c", &a);
a=getchar();
}
while(a=='y'||a=='Y');
p1->next=NULL;
return (head);
}
void sort(struct student mm[], int n)
{
int i,j;
for (i=0; i<n-1; ++i)
for(j=i+1; j<n-1-i; ++j)
if(mm[i].sc>mm[j].sc)
{
mm[i].next=mm[j].next;
mm[j].next=&mm[i];
}
return;
}
void print (struct student *pp)
{
printf ("名次:\n");
do
{
printf ("名字:%s, 分數:%d\n", pp->name,pp->sc);
pp=pp->next;
}while(pp->next != NULL);
return;
}
沒錯提示出錯
但是
錯誤的運行結果
是

求盡快解答謝謝啦!
uj5u.com熱心網友回復:
你這里有幾點問題:1、在你輸入完第一個資料后,可以用scanf ("%s", &a);提示輸入Y/N,而不是a=getchar();
2、if (n=1)應該為n == 1;
3、在判斷輸出時while(pp->next != NULL)應該為while(pp != NULL);
uj5u.com熱心網友回復:
你的鏈表排序有問題 詳細可以參考http://blog.csdn.net/jasonxzy/article/details/5764348轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137602.html
標籤:基礎類
上一篇:鏈表的實 現
