9.23 数据结构作业5

头文件:
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值