//link.c文件
#include"link.h"
plink cread(){ //创建头节点
plink l = malloc(sizeof(struct link));
if(NULL == l){
printf("申请空间失败\n");
return NULL;
}
l->len = 0;
l->next = NULL;
return l;
}
//头插排序
int front_insert(plink l,student *a){
plink p = malloc(sizeof(struct link));
p->next = l->next;
l->next = p;
p->data = *a;
l->len++;
return 0;
}
//遍历输出
int output(plink l){
plink p = l;
for(int i=0;i<l->len;i++){
p=p->next;
printf("%d %s %.2f\n",p->data.id,p->data.name,p->data.sorce);
}
printf("\n");
return 0;
}
//任意位置插入
int any_insert(plink l,student a,int b){
if(l==NULL||b<1||b>l->len+1){
printf("插入位置有误\n");
return -1;
}
plink p = l;
for(int i=1;i<b;i++){
p=p->next;
}
plink t = malloc(sizeof(struct link));
t->data = a;
t->next = p->next;
p->next = t;
l->len++;
return 0;
}
//任意位置删除
int any_dele(plink l,int a){
if(l==NULL||a<1||a>l->len){
printf("删除位置有误\n");
return -1;
}
plink p = l;
for(int i=1;i<a;i++){
p=p->next;
}
plink t = p->next;
p->next = p->next->next;
free(t);
t=NULL;
l->len--;
return 0;
}
//链表逆置
int nizhi(plink l){
plink p = l->next;
plink t = p->next;
while(t!=NULL){
p->next = t->next;
t->next = l->next;
l->next = t;
t = p->next;
}
return 0;
}
//按学生成绩排序
int link_sort(plink l){
plink p;
for(int i=0;i<l->len;i++){
for(p=l->next;p->next!=NULL;p=p->next){
if(p->data.sorce<p->next->data.sorce){
student a;
a = p->data;
p->data = p->next->data;
p->next->data = a;
}
}
}
return 0;
}
//link.h文件
#ifndef _STULINK__
#define _STULINK__
#include <myhead.h>
typedef struct {
int id;
char name[20];
float sorce;
}student;
typedef struct link{
union{
int len;
student data;
};
struct link *next;
}*plink;
plink cread();
int front_insert(plink,student*);
int output(plink);
int any_insert(plink,student,int);
int any_dele(plink ,int);
int nizhi(plink);
int link_sort(plink);
#endif
//main.c文件
#include "link.h"
int main(int argc, const char *argv[])
{
plink l = cread();
student arr[4] = {{101,"小明",89},{102,"小李",99},{103,"小华",65},{104,"小芳",88}};
for(int i=0;i<4;i++){
front_insert(l,arr+i);
}
output(l);
student a = {105,"小丁",89};
any_insert(l,a,3);
output(l);
any_dele(l,3);
output(l);
nizhi(l);
output(l);
link_sort(l);
output(l);
return 0;
}
完成单链表操作,要求节点构造类型。1、建立学生结构体(学号,姓名,成绩)2、循环调用头插法创建整表3、遍历单链表4、任意位置插入一个完整的学生信息5、任意位置删除一个学生。6、单链表逆置
最新推荐文章于 2024-11-06 09:48:48 发布