链表的使用
写了一个这样的程序,不知道有什么问题,请各位高手看一下了。#include <malloc.h>
#include <string.h>
#define LEN sizeof(STU)
typedef struct student
{
char name[20];
double score;
int order;
struct student *next;
}STU,*pstu;
pstu create(void);
void print( pstu);
void ordernum( pstu);
main()
{
pstu head=NULL;
head=create();
// print(head);
getch();
}
pstu create(void)
{//建立链表
int i=0;
pstu head,p1,p2;
char name[20][20];
double score[20]={73.5,78.5,87,79,71,70,100};
p1=(pstu)malloc(LEN);
if(!p1)
{
printf("内存分配失败\n");
exit(1);
}
head=p1;
for( i=0;name[i]==0;i++)
{
p2=(pstu)malloc(LEN);
if(!p2)
{
printf("内存分配失败\n");
exit(1);
}
printf("请输入姓名第%d个学生的姓名\n");
gets(name[i]);
strcpy(p2->name,name[i]);
p2->score=score[i];
p2->order=7;
p1->next=p2;
p1=p2;
p2->next=NULL;
}
//ordernum(head);//对学生的成绩进行排序
return head;
} //建立链表结束
void print(pstu head)
{//输出链表中的数据
pstu p1=head;
p1=p1->next;
int i=1;
while(p1!=NULL)
{
printf("第%d学生的记录\n", i);
printf(" name=%c \n",p1->name);
printf(" score=%lf\n",p1->score);
printf(" order=%d \n",p1->order);
printf("\n");
p1=p1->next;
i++;
}
getch();
}//输出链表结束
void ordernum(pstu head)
{//对学生成绩进行排序
pstu p1=NULL,p2=NULL;
int score=0;
p1=head->next;
p2=head->next;
while(p1!=NULL)
{
score=p1->score; //得到第一个学生的成绩
while(p2!=NULL)
{
if(score>(p2->score))//比较两个学生的成绩
p1->order--; //如果p1的成绩小于p2的成绩
//那么P1的order减1
p2=p2->next;
}
p1=p1->next;
p2=head;
}
}
搜索更多相关的解决方案:
链表
----------------解决方案--------------------------------------------------------
一点小建议,写程序的时候一定要考虑扩展性
而且要在开始学程序的时候就养成这样的习惯
----------------解决方案--------------------------------------------------------
不想改了,还有一点逻辑上的问题..指针使用前要初始化的
#include <malloc.h>
#include <string.h>
#include<conio.h>
#include<stdio.h>
#define LEN sizeof(STU)
typedef struct student
{
char name[20];
double score;
int order;
struct student *next;
}STU,*pstu;
pstu create(void);
void print( pstu);
void ordernum( pstu);
int main()
{
pstu head=NULL;
head=create();
print(head);
getch();
return 0;
}
pstu create(void)
{//建立链表
int i=0;
pstu head,p1,p2;
char name[20][20];
double score[20]={73.5,78.5,87,79,71,70,100};
p1=(pstu)malloc(sizeof(STU));
if(!p1)
{
printf("内存分配失败\n");
}
head=p1;
p1->next=NULL;
for( i=0;i<7;i++)
{
p2=(pstu)malloc(sizeof(STU));
if(!p2)
{
printf("内存分配失败\n");
}
printf("请输入姓名第%d个学生的姓名\n",i);
gets(name[i]);
fflush(stdin);
strcpy(p2->name,name[i]);
p2->score=score[i];
p2->order=7;
p1->next=p2;
p1=p2;
p2->next=NULL;
}
ordernum(head);//对学生的成绩进行排序
return head;
} //建立链表结束
void print(pstu head)
{//输出链表中的数据
int i=1;
pstu p1=head;
p1=p1->next;
while(p1!=NULL)
{
printf("第%d学生的记录\n", i);
printf(" name=%s \n",p1->name);
printf(" score=%lf\n",p1->score);
printf(" order=%d \n",p1->order);
printf("\n");
p1=p1->next;
i++;
}
getch();
}//输出链表结束
void ordernum(pstu head)
{//对学生成绩进行排序
pstu p1=NULL,p2=NULL;
double score=0;
p1=head->next;
p2=head->next;
while(p1!=NULL)
{
score=p1->score; //得到第一个学生的成绩
while(p2!=NULL)
{
if(score>(p2->score))//比较两个学生的成绩
p1->order--; //如果p1的成绩小于p2的成绩
//那么P1的order减1
p2=p2->next;
}
p1=p1->next;
p2=head;
}
}
----------------解决方案--------------------------------------------------------