您的位置:首页 > 其它

7月10号作业

2020-07-14 06:33 148 查看

1、创建两个学生链表、含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生
2、将上面两个链表合并,按学生的年龄进行排序,合成新的链表
3、将上题中 建立的链表进行反转,实现按年龄的逆序排列
4、在上面的实现的新链表中,给定一个年龄 ,迅速查找和该学生年龄最接近的学生姓名。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef struct student
{
char name[20];
int age;
struct student *next;
};

typedef struct  student student;
typedef student * Link;

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

void insert_head_node(Link newnode,Link *head)
{
newnode->next = *head;
*head = newnode;
}

//初始化链表信息
void init_student(char *a,int age,Link *head)
{
Link newnode = (Link )malloc(sizeof(student));
strcpy(newnode->name,a);
newnode->age = age;
insert_head_node(newnode,&(*head));
}

//打印链表
void display_link(Link head)
{
Link temp = head;
while(temp != NULL)
{
printf("name = %s\tage = %d\n",temp->name,temp->age);
temp = temp->next;
}
}

//合并链表,并按年龄排序
Link merge(Link head_gril ,Link head_boy)
{
Link temp_gril = head_gril;
Link temp_boy = head_boy;
if(temp_gril == NULL){
return temp_boy;
}
if(temp_boy == NULL){
return temp_gril;
}
if(temp_gril->age < temp_boy->age){
temp_gril->next = merge(temp_gril->next,temp_boy);
return temp_gril;
}
else{
temp_boy->next = merge(temp_gril,temp_boy->next);
return temp_boy;
}
}

//反转链表
Link reverse(Link head)
{
Link p;
Link res = NULL;
Link temp = head;

while(temp){
p = temp->next;
temp->next = res;
res = temp;
temp = p;
}
return res;
}

//查找链表
void search(Link head,int age)
{
Link temp = head;
int age_1;
int age_2;

while(temp->next != NULL)
{
if(temp->age >= age && temp->next->age <= age)
{
age_1 = abs(temp->age - age);
age_2 = abs(temp->next->age - age);
if(age_1 <= age_2)
{
printf("name = %s ",temp->name);
break;
}
else
{
printf("name = %s ",temp->next->name);
break;
}
}
temp = temp->next;
}
}

int main(int argc,char *argv[])
{
int i = 0;

Link head_girl;
Link head_boy;
Link res = NULL;

create_link(&head_girl);
create_link(&head_boy);
if(NULL == head_girl || NULL == head_boy)
{
printf("init link success!\n");
}
else
{
printf("init link failed!\n");
}

//初始化链表信息
init_student("girl_1",22,&head_girl);
init_student("girl_2",18,&head_girl);
init_student("girl_3",14,&head_girl);
init_student("boy_1",20,&head_boy);
init_student("boy_2",16,&head_boy);
init_student("boy_3",12,&head_boy);

//打印链表
printf("Link_girl:\n");
display_link(head_girl);
printf("Link_boy:\n");
display_link(head_boy);
printf("\n\n");

//合并链表
res = merge(head_girl,head_boy);
printf("Link_merge:\n");
display_link(res);
printf("\n\n");

//反转链表
res = reverse(res);
printf("Link_reverse:\n");
display_link(res);
printf("\n\n");

//查找链表
search(res,20);
printf("\n\n");

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