创建单链表,存储4个学生信息(年龄,分数,姓名)。
1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表
2、任意位置插入一个新学生。变量e是学生结构体变量。
3、任意位置删除一个学生。
4、单链表逆置后将学生信息输出。
main.c文件
#include "fun.h"
int main(int argc, const char *argv[])
{
Plink L=Definition_header();
for(int i=0;i<MAX;i++)
{
Head_insertion(L);
}
output_my(L);
stu e={"李四",2,56.7};
any_interposition(L,2,e);
output_my(L);
any_dele(L,2);
output_my(L);
sort_my(L);
output_my(L);
return 0;
}
fun.h文件
#ifndef __FUN_H__
#define __FUN_H__
#define MAX 3
#define AZ 20
#include <myhead.h>
typedef struct student
{
char name[AZ];
int age;
float score;
}stu;
typedef struct node
{
union
{
int len;
stu stud;
};
struct node *next;
}Link,*Plink;
Plink Definition_header();
//头插法插入元素
int Head_insertion(Plink L);
int output_my(Plink L);
int any_interposition(Plink L,int key,stu e);
int any_dele(Plink L,int key);
int sort_my(Plink L);
#endif
fun.c文件
#include "fun.h"
Plink Definition_header()
{
Plink p=malloc(sizeof(Link));
if(p==NULL)
{
printf("单链表不存在\n");
return NULL;
}
p->len=0;//格式化
p->next=NULL;
// p->stud->
printf("创建完成\n");
return p;
}
//头插法插入元素
int Head_insertion(Plink L)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink p=malloc(sizeof(Link));
scanf("%s%d%f",p->stud.name,&p->stud.age,
&p->stud.score);
p->next=L->next;
L->next=p;
L->len++;
return 0;
}
int output_my(Plink L)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink p=L;
printf("输出为\n");
for(int i=0;i<L->len;i++)
{
p=p->next;
printf("姓名:%s\t年龄:%d\t分数:%.2f\n",p->stud.name,
p->stud.age,p->stud.score);
}
return 0;
}
int any_interposition(Plink L,int key,stu e)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink t=L;
int i;
for(i=0;i<key-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->stud=e;
p->next=t->next;
t->next=p;
L->len++;
return 0;
}
int any_dele(Plink L,int key)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink t=L;
int i;
for(i=0;i<key-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=Q->next;
free(Q);
Q=NULL;
L->len--;
return 0;
}
int sort_my(Plink L)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink t=L->next;
Plink Q=t->next;
int i;
for(i=0;i<L->len-1;i++)
{
t->next=Q->next;
Q->next=L->next;
L->next=Q;
Q=t->next;
}
free(Q);
Q=NULL;
return 0;
}