1、建立学生结构体(学号,姓名,成绩)
2、循环调用头插法创建整表
3、遍历单链表
4、任意位置插入一个完整的学生信息
5、任意位置删除一个学生。
6、单链表逆置
7、单链表按照学生成绩排序。
头文件
#ifndef _LINK_
#define _LINK_
#include<myhead.h>
typedef struct student
{
int id;
char name[100];
float cj;
}student;
typedef struct Node
{
union{
student s;
int len;
};
struct Node *next;
}Link,*Plink;
Plink creat_link();
int input_link(Plink L,student st);
int output_link(Plink L);
int arbit_insert(Plink L,int pos,student s);
int arbit_dele(Plink L,int pos);
int reverse_link(Plink L);
int sort_link(Plink L);
#endif
源文件
#include"link.h"
Plink creat_link(){
Plink L=malloc(sizeof(Link));
if(L==NULL){
printf("申请内存失败\n");
return NULL;
}
L->len=0;
L->next=NULL;
return L;
}
int input_link(Plink L,student st){
if(L==NULL){
printf("插入失败\n");
return -1;
}
Plink t=malloc(sizeof(Link));
t->s=st;
t->next=L->next;
L->next=t;
L->len++;
return 0;
}
int output_link(Plink L){
if(L==NULL){
printf("链表为空,遍历失败\n");
return -1;
}
Plink t=L->next;
for(int i=0;i<L->len;i++){
printf("%d %s %f\n",t->s.id,t->s.name,t->s.cj);
t=t->next;
}
return 0;
}
int arbit_insert(Plink L,int pos,student s){
if(pos<1||pos>L->len+1||L==NULL){
printf("插入失败\n");
return -1;
}
Plink t=L;
for(int i=0;i<pos-1;i++){
t=t->next;
}
Plink n=malloc(sizeof(Link));
n->s=s;
n->next=t->next;
t->next=n;
L->len++;
return 0;
}
int arbit_dele(Plink L,int pos){
if(pos<1||pos>L->len||NULL==L){
printf("删除失败\n");
return -1;
}
Plink t=L;
for(int i=0;i<pos-1;i++){
t=t->next;
}
Plink Q=t->next;
t->next=t->next->next;
free(Q);
Q=NULL;
L->len--;
return 0;
}
int reverse_link(Plink L){
if(L==NULL){
printf("逆置失败\n");
return -1;
}
Plink Q=L->next,t=Q->next;;
while(t!=NULL){
Q->next=t->next;
t->next=L->next;
L->next=t;
t=Q->next;
}
return 0;
}
int sort_link(Plink L){
if(NULL==L){
return -1;
}
Plink t=L->next;
for(Plink i=t;i->next!=NULL;i=i->next){
for(Plink j=t;j->next!=NULL;j=j->next){
if(j->s.cj>j->next->s.cj){
student st=j->s;
j->s=j->next->s;
j->next->s=st;
}
}
}
return 0;
}
主函数
#include"link.h"
int main(int argc, char* argv[])
{
Plink L=creat_link();
student s_arr[4]={{1001,"菈妮",98},
{1002,"玛莲妮亚",100},
{1003,"克莱恩",86},
{1004,"阿曼尼西斯",86}};
//1.循环调用头插法创建链表
for(int i=0;i<4;i++){
input_link(L,s_arr[i]);
}
//2.遍历单链表
output_link(L);
printf("\n");
//3.任意位置插入一个完整学生的信息
student s={1005,"莎提拉",90};
arbit_insert(L,3,s);
output_link(L);
printf("\n");
//4.任意位置删除一个学生
arbit_dele(L,4);
output_link(L);
printf("\n");
//5.单链表逆置
reverse_link(L);
output_link(L);
printf("\n");
//6.单链表按照学生成绩排序
sort_link(L);
output_link(L);
return 0;
}