您的位置:首页 > 其它

编写程序STUDENT *Create(STUDENT studs[],int n)。

2016-11-06 18:49 190 查看
STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函数的功能是根据studs数组建立一个链表,链表中结点按成绩降序排列,函数返回链表头指针。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student//定义结点结构体
{
char name[10];
int score;
struct student *next;
};

typedef struct student STUDENT;
typedef struct student* Link;

void create_link(Link *head)
{
*head = NULL;
}

void is_malloc_ok(Link new_node)
{
if(NULL == new_node)
{
printf("malloc error!\n");
exit(-1);
}
}

void create_new_node(Link *new_node)
{
*new_node = (Link)malloc(sizeof(STUDENT));
is_malloc_ok(*new_node);
}

void insert_new_node(Link *head, Link new_node)
{//由成绩从小到大排序,插入新结点
Link tmp = NULL;
Link q = NULL;

tmp = *head;
q = *head;

if(NULL == *head)//空链表,头插新结点
{
new_node->next = NULL;
*head = new_node;
}
else
{
while ((new_node->score > tmp->score) && (tmp->next != NULL))
{
q = tmp;
tmp = tmp->next;
}
if (new_node->score < tmp->score)
{
if (*head == tmp)
{
new_node->next = tmp;
*head = new_node;
}
else
{
new_node->next = tmp;
q->next = new_node;
}
}
if ((new_node->score > tmp->score) && (tmp->next==NULL))
{
tmp->next = new_node;
new_node->next = NULL;
}
}
}

STUDENT *create(STUDENT studs[], int n)
{
int i;
Link head = NULL;
Link new_node = NULL;

create_link(&head);

for (i = 0; i < n; i++)
{
create_new_node(&new_node);
strcpy(new_node->name,studs[i].name);
new_node->score = studs[i].score;
new_node->next = studs[i].next;
insert_new_node(&head, new_node);
}

return head;
}

void display_link(Link head)
{
Link tmp = NULL;

tmp = head;

while (tmp->next != NULL)
{
printf("The score %s is %d\n",tmp->name,tmp->score);
tmp = tmp->next;
if (tmp->next == NULL)
{
printf("The score %s is %d\n",tmp->name,tmp->score);
break;
}
}

}

int main()
{
int n;
int i;
Link head = NULL;
STUDENT studs[10];

printf("Enter number of students!(<=10)\n");
scanf("%d",&n);
printf("Enter name and score!\n");

for (i = 0; i < n; i++)
{
scanf("%s",studs[i].name);
scanf("%d",&(studs[i].score));
studs[i].next = NULL;
}

head = create(studs,n);

display_link(head);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐