头文件:
#ifndef _LINK_
#define _LINK_
#include<myhead.h>
typedef struct student{
int id;
char name[20];
float score;
}stu;
typedef struct Link{
union{
int len;
stu a;
};
struct Link *next;
}lk,*Plink;
Plink create_link();
int empty(Plink);
int front_insert(Plink);
int output_link(Plink);
int anypos_insert(Plink,int);
int anypos_dele(Plink,int);
int link_re(Plink);
int sort_id(Plink);
int link_destroy(Plink);
#endif
源文件:
#include"link.h"
Plink create_link(){
Plink p=malloc(sizeof(lk));
if(NULL==p){
printf("申请失败\n");
return NULL;
}
p->len=0;
p->next=NULL;
return p;
}
int empty(Plink L){
if(NULL==L){
return 1;
}
return 0;
}
int front_insert(Plink L){
if(empty(L)){
printf("插入失败\n");
return -1;
}
int n;
printf("请输入学生个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
Plink p=malloc(sizeof(lk));
printf("请输入第%d个学生的信息\n",i+1);
printf("请输入学号:");
scanf("%d",&p->a.id);
printf("请输入姓名:");
scanf("%s",p->a.name);
printf("请输入成绩:");
scanf("%f",&p->a.score);
p->next=L->next;
L->next=p;
L->len++;
}
return 0;
}
int output_link(Plink L){
if(empty(L)){
printf("输出失败\n");
return -1;
}
Plink t=L;
printf("学生信息如下:\n");
for(int i=0;i<L->len;i++){
t=t->next;
printf("学号:%d\t姓名:%s\t成绩:%.2f\n",t->a.id,t->a.name,t->a.score);
}
return 0;
}
int anypos_insert(Plink L,int pos1){
if(pos1<1||pos1>L->len+1||empty(L)){
printf("插入失败\n");
return -1;
}
Plink t=L;
for(int i=1;i<pos1;i++){
t=t->next;
}
Plink p=malloc(sizeof(lk));
printf("请输入学生的信息\n");
printf("请输入学号:");
scanf("%d",&p->a.id);
printf("请输入姓名:");
scanf("%s",p->a.name);
printf("请输入成绩:");
scanf("%f",&p->a.score);
p->next=t->next;
t->next=p;
L->len++;
printf("插入成功\n");
return 0;
}
int anypos_dele(Plink L,int pos2){
if(pos2<1||pos2>L->len||empty(L)){
printf("删除失败\n");
return -1;
}
Plink t=L;
for(int i=1;i<pos2;i++){
t=t->next;
}
Plink Q=t->next;
t->next=t->next->next;
L->len--;
free(Q);
Q=NULL;
printf("删除成功\n");
return 0;
}
int link_re(Plink L){
if(L->len<2||empty(L)){
printf("逆置失败\n");
return -1;
}
Plink Q=L->next;
Plink t=Q->next;
while(t!=NULL){
Q->next=t->next;
t->next=L->next;
L->next=t;
t=Q->next;
}
printf("逆置成功\n");
return 0;
}
int sort_id(Plink L){
if(empty(L)){
printf("排序失败\n");
return -1;
}
int i;
Plink j;
for(i=1;i<L->len;i++){
for(j=L->next;j->next!=NULL;j=j->next){
if(j->a.score<j->next->a.score){
stu t=j->a;
j->a=j->next->a;
j->next->a=t;
}
}
}
printf("排序成功\n");
return 0;
}
int link_destroy(Plink L){
if(empty(L)){
printf("销毁失败\n");
return -1;
}
Plink t=L;
while(t!=NULL){
t=t->next;
free(L);
L=t;
}
printf("销毁成功\n");
return 0;
}
测试文件:
#include"link.h"
int main(int argc, char* argv[])
{
Plink L=create_link();
int ch;
while(1){
printf("\t————————学生管理系统————————\n");
printf("\t1、 头插学生信息\n");
printf("\t2、 输出学生信息\n");
printf("\t3、 学生信息插入任意位置\n");
printf("\t4、 删除任意位置学生信息\n");
printf("\t5、 学生信息逆置\n");
printf("\t6、 按成绩排序学生信息\n");
printf("\t0、 退出系统\n");
printf("请输入你的选择:");
scanf("%d",&ch);
switch(ch){
case 1: front_insert(L);
break;
case 2: output_link(L);
break;
case 3:
printf("请输入需要插入的位置:");
int pos1;
scanf("%d",&pos1);
anypos_insert(L,pos1);
break;
case 4:
printf("请输入需要删除的位置:");
int pos2;
scanf("%d",&pos2);
anypos_dele(L,pos2);
break;
case 5: link_re(L);
break;
case 6: sort_id(L);
break;
case 0:
link_destroy(L);
printf("感谢您的使用!\n");
return 0;
}
}
return 0;
}