.1.题目:创建两个学生链表,含有姓名、年龄的信息,一个链
表存放男生,一个链表存放女生。
.2.题目:将上面两个链表合并,按学生的年龄进行排序,合
成新的链表.
.3.题目:将上题中建立的链表进行反转,实现按年龄的逆序
排列
.4.题目:在上面的实现的新链表中,给定一个年龄,迅速查
找和该学生年龄最接近的学生姓名。
综合后的代码:链表实现增加学生信息;按学生年龄排序;学生数据逆序;给定一个年龄,迅速查找和该学生年龄最接近的学姓名。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX sizeof(char) * 20
enum RESULT
{
RANK_FAIL,
RANK_SUCCESS,
Reverse_fail,
Reverse_success,
Search_fail,
Search_success
};
/****定义结构体******/
struct students
{
char * name;
char sex;
int age;
struct students *next;
};
typedef struct students Student;
typedef Student * STU;
/*****初始化头指针*******/
void init_head(STU *head)
{
*head = (STU)malloc(sizeof(Student));
(*head)->next = NULL;
}
/******链表尾插入函数*******/
void insert_tail(STU newstudent,STU *head)
{
STU temp = *head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newstudent;
newstudent->next = NULL;
}
/******年龄排序函数********/
int rank_age(STU *head)
{
int i;
int j;
int n;
int count = 0;
STU p = *head;
STU s = p->next;
STU t = s->next;
#if 1
if(((*head)->next == NULL) || ((*head)->next->next == NULL))
{
return RANK_FAIL;
}
else
{
#endif
STU temp = (*head)->next;
while(temp != NULL)
{
count++;
temp = temp->next;
}
n = count - 1;
for(i = 0;i < n;i++)
{
for(j = 0;j < (n - i);j++)
{
if(s->age > t->age)
{
p->next = t;
s->next = t->next;