要求:
完成单链表操作
1、建立学生结构体(学号,姓名 , 成绩)
2、循环调用头插法创建整表
3、遍历单链表
4、任意位置插入一个完成的学生信息
5、任意位置删除一个学生
6、单链表逆置
7、单链表按照学生成绩排序
#ifndef _XS_
#define _XS_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
int id;
char name[10];
double score;
}student;
typedef struct node{
union{
int len ;
student date ;
};
struct node *next;
}Link, *Plink;
/*************/
Plink create();
int front_insert(Plink ,student );
int input_link(student*);
int out_link(Plink );
int anypos_insert(Plink , int , student);
int anypos_delete(Plink , int);
int re(Plink);
int buublu(Plink);
#endif
#include"_st.h"
int main(int argc, const char *argv[])
{
student a[5] = {{1001 , "zhao",81.3},{1002,"qian",92},{1004 , "sun" , 98},{1003,"li" ,78},{1005,"zhou" ,100}};
Plink L = create();
int i;
for(i= 0 ; i<5 ; i++){
front_insert(L,a[i]);
}
out_link(L);
student e = {9527 ,"钰儿" ,100};
anypos_insert(L,2,e);
out_link(L);
anypos_delete(L , 1);
out_link(L);
re(L);
out_link(L);
buublu(L);
out_link(L);
return 0;
return 0;
}
#include"_st.h"
Plink create(){
Plink p = malloc(sizeof(Link));
if(p==NULL){
printf("空间申请失败");
return NULL;
}
p->len=0;
p->next = NULL;
return p;
}
int front_insert(Plink L , student e){
if(L==NULL){
printf("头插失败\n");
return -1;
}
Plink p = malloc(sizeof(Link));
if(p==NULL){
printf("链表不存在创建失败");
return -1;
}
p->date = e;
p->next = L->next;
L->next = p;
L->len++;
return 0;
}
int input_link(student a[]){
for(int i = 0 ; i< 5;i++){
printf("请输入学号");
scanf("%d" , &a[i].id);
printf("请输入姓名");
scanf("%s" , a[i].name);
printf("请输入分数");
scanf("%le" , &a[i].score);
}
return 0;
}
int out_link(Plink L){
if(L==NULL||L->len==0){
printf("链表为空");
return -1;
}
Plink t = L;
for(int i = 0 ; i<L->len;i++){
t=t->next;
printf("学号:%5d姓名:%5s分数:%5.2f\n" , t->date.id,t->date.name,t->date.score);
}
return 0;
}
int anypos_insert(Plink L,int pos,student e){
if(pos<1||pos>L->len + 1||L==NULL){
printf("插入失败\n");
return -1;
}
int i;
Plink t = L;
for(i=0 ; i<pos-1 ; i++){
t=t->next;
}
Plink p = malloc(sizeof(Link));
p->date = e;
p->next = t->next;
t->next = p;
L->len++;
printf("插入成功\n");
return 0;
}
int anypos_delete(Plink L , int pos){
if(L==NULL||pos<1||pos>L->len+1){
printf("删除失败\n");
return -1;
}
Plink t = L;
int i ;
for(i = 0 ; i<pos-1;i++){
t=t->next;
}
Plink Q = t->next;
t->next = t->next->next;
free(Q);
Q==NULL;
L->len--;
printf("删除成功\n");
return 0;
}
int re(Plink L){
if(L==NULL||L->len ==0){
printf("逆置失败");
return -1;
}
Plink Q ,t ;
Q = L->next;
t=Q->next;
while(t!=NULL){
Q->next = t->next;
t->next = L->next->next;
L->next = t;
t= Q->next;
}
return 0;
}
int buublu(Plink L){
int i ;
Plink j;
for(i=0 ; i<L->len ; i++){
for(j = L->next ; j!= NULL;j=j->next ){
if(j->date.score<j->next->date.score){
student temp;
temp = j->date;
j->date= j->next->date;
j->next->date = temp;
}
}
}
}