数据结构8月14日

作业1、顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生信息,6、按照姓名顺序查找一个学生是否存在7、对学生年龄直接插入排序(从小到大)。

(1)、学生信息结构体姓名,分数,年龄,电话。

(2)、其他功能函数自定义,分文件编译。

主函数:

#include "fun.h"
int main(int argc, const char *argv[])
{
	Plist L=creat_node();//申请顺序表空间
	input_node(L);//(输入)录入信息
	int a;
	while(1)
	{	
	printf("请输入你要执行的操作>>>\n输入1为插入学生信息\n输入2为删除某个学生信息\n输入3为按照位置修改某个学生信息\n输入4为按照姓名顺序查找某个学生是否存在\n输入5为按照年龄对学生进行直插排序\n输入6为查看学生信息表\n输入7为退出系统\n");
	scanf("%d",&a);
	switch(a)
	{
		case 1:insert_node(L);break;//插入某个学生信息
		case 2:dele_node(L);break;//删除某个学生信息
		case 3:change_node(L);break;//修改某个学生信息
		case 4:find_node(L);break;//按姓名查找某个学生是否存在	
		case 5:insort_node(L);break;//对学生年龄进行直接插入排序
		case 6:output_node(L);break;//查看学生信息表
		case 7:return 0;break;	   
		default:printf("输入错误,请重新输入\n");
	}
	}
	return 0;
}

功能函数:

#include "fun.h"
Plist creat_node()
{
	Plist p=malloc(sizeof(List));
	if(p==NULL)
	{
		printf("申请失败\n");
		return NULL;
	}
	memset(p->data,0,sizeof(p->data));//数据置0
	p->len=0;//长度置0
	return p;
}

void input_node(Plist L)
{	
	int n;
	printf("请输入你现在要录入几个学生的信息\n");
	scanf("%d",&n);
	printf("请录入学生信息\n");
	for(int i=0;i<n;i++)
	{
		printf("请输入第%d个学生的姓名\n",i+1);
		scanf("%s",L->data[i].name);
		printf("请输入第%d个学生的年龄\n",i+1);
		scanf("%d",&L->data[i].age);
		printf("请输入第%d个学生的成绩\n",i+1);
		scanf("%d",&L->data[i].score);
		printf("请输入第%d个学生的电话\n",i+1);
		scanf("%s",L->data[i].num);
		L->len++;
	}
}

void output_node(Plist L)
{
	for(int i=0;i<L->len;i++)
	{
		printf("%s\t%d\t%d\t%s\n",L->data[i].name
				,L->data[i].age,L->data[i].score,L->data[i].num);
	}
}

void insert_node(Plist L)
{
	int pos;
	stru e;
	printf("请输入要插入学生信息的位置\n");
	scanf("%d",&pos);
	printf("请输入要插入学生的姓名\n");
	scanf("%s",e.name);
	printf("请输入要插入学生的年龄\n");
	scanf("%d",&e.age);
	printf("请输入要插入学生的成绩\n");
	scanf("%d",&e.score);
	printf("请输入要插入学生的电话\n");
	scanf("%s",e.num);
	for(int i=L->len-1;i>=pos-1;i--)
	{
		L->data[i+1]=L->data[i];
	}
	L->data[pos-1]=e;
	L->len++;
}

void dele_node(Plist L)
{
	int pos;
	printf("请输入要删除学生的位置\n");
	scanf("%d",&pos);
	for(int i=pos-1;i<L->len;i++)
	{
		L->data[i]=L->data[i+1];
	}
	L->len--;
}

void change_node(Plist L)
{
	int pos;
	stru e;
	printf("请输入要修改学生信息的位置\n");
	scanf("%d",&pos);
	printf("请输入要修改学生的姓名\n");
	scanf("%s",e.name);
	printf("请输入要修改学生的年龄\n");
	scanf("%d",&e.age);
	printf("请输入要修改学生的成绩\n");
	scanf("%d",&e.score);
	printf("请输入要修改学生的电话\n");
	scanf("%s",e.num);
	L->data[pos-1]=e;
}

void find_node(Plist L)
{
	printf("请输入你要查找学生的名字\n");
	char n[20];
	int f=0;
	scanf("%s",n);
	for(int i=0;i<L->len;i++)
	{
		if(strcmp(L->data[i].name,n)==0)
		{
			f=1;			
		}
	}
	if(f==1)
	{
		printf("这个名字的学生存在\n");
	}
	else
	{
		printf("这个名字的学生不存在\n");
	}
}

void insort_node(Plist L)
{
	int i,j,t;
	for(i=1;i<L->len;i++)
	{
		t=L->data[i].age;
	
	for(j=i-1;j>=0;j--)
	{
		if(t<L->data[j].age)
		{
			L->data[j+1]=L->data[j];
		}
	else
	{
		break;
	}
	}
	L->data[j+1].age=t;
	}
	printf("排序成功\n");
}

函数声明 头文件:

#ifndef _FUN_H_
#define _FUN_H_
#include <myhead.h>
#define MAX 10
typedef struct
{
	char name[10];
	int age;
	int score;
	char num[20];
}stru;
typedef struct
{
	stru data[MAX];//结构体数组
	int len;//计数器
}List,*Plist;
Plist creat_node();
void input_node(Plist L);
void output_node(Plist L);
void insert_node(Plist L);
void dele_node(Plist L);
void change_node(Plist L);
void find_node(Plist L);
void insort_node(Plist L);

#endif

作业   2、单链表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建单链表,2录入学生信息,3删除一个学生信息,4按照成绩修改一个学生的年龄,5、按照姓名顺序查找一个学生是否存在。

要求:

(1)、学生信息结构体姓名,分数,年龄,电话。

(2)、其他功能函数自定义,分文件编译。

主函数:

#include "fun.h"
int main(int argc, const char *argv[])
{
	Plink L=creat_node();
	printf("请输入你要录入几位学生的信息\n");
	int n;
	scanf("%d",&n);
	stru e;
	for(int i=0;i<n;i++)
	{
		printf("请输入第%d个学生的姓名\n",i+1);
		scanf("%s",e.name);
		printf("请输入第%d个学生的年龄\n",i+1);
		scanf("%d",&e.age);
		printf("请输入第%d个学生的成绩\n",i+1);
		scanf("%d",&e.score);
		printf("请输入第%d个学生的电话\n",i+1);
		scanf("%s",e.num);
		tail_input(L,e);
	}
	printf("%d",L->len);
	int a;
	while(1)
	{
		printf("请选择你要进行的操作\n输入1为按位置删除某个学生\n输入2为按照成绩修改某个学生年龄\n输入3为按照名字查找某个学生是否存在\n输入4为查看学生信息\n输入5为退出系统\n");
		scanf("%d",&a);
		switch(a)
		{
		case 1:dele_pos(L);break;
		case 2:change_age(L);break;
		case 3:find_name(L);break;
		case 4:output_node(L);break;
		case 5:return 0;break;
		default:printf("输入错误\n");	   
		}
	}
	return 0;
}

功能函数:

#include "fun.h"
Plink creat_node()
{
	Plink p=malloc(sizeof(Link));
	if(p==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	p->len=0;
	p->next=NULL;
	return p;
}

void tail_input(Plink L,stru e)
{
	if(L==NULL)
	{
		printf("插入失败\n");
	}
	Plink t=L;
	for(int i=0;i<L->len;i++)
	{
		t=t->next;
	}
	Plink p=malloc(sizeof(Link));
	t->next=p;
	p->next=NULL;
	p->data=e;
	L->len++;
	printf("插入成功\n");
}

void output_node(Plink L)
{
	if(L==NULL||L->len==0)
	{
		printf("链表为空或不存在\n");
	}
	Plink t=L;
	for(int i=0;i<L->len;i++)
	{
		t=t->next;
		printf("%s\t%d\t%d\t%s\n",
				t->data.name,t->data.age,
				t->data.score,t->data.num);
	}
}

void dele_pos(Plink L)
{
	if(L==NULL||L->len==0)
	{
		printf("链表为空或不存在\n");
	}
	printf("请输入要删除学生的位置:\n");
	int pos;
	scanf("%d",&pos);
	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;
}

void change_age(Plink L)
{
	if(L==NULL||L->len==0)
	{
		printf("链表为空或不存在\n");
	}
	printf("请输入你要修改年龄学生的成绩\n");
	int aage;
	scanf("%d",&aage);
	printf("请输入你要将其成绩修改为:\n");
	int sscore;
	scanf("%d",&sscore);
	Plink t=L;
	Plink Q;
	for(int i=0;i<L->len;i++)
	{
		t=t->next;
		if(t->data.age==aage)
		{
			Q=t;break;
		}
	}
	Q->data.age=aage;
	printf("修改成功\n");
}

void find_name(Plink L)
{
	if(L==NULL||L->len==0)
	{
		printf("链表为空或不存在\n");
	}
	printf("请输入你要查找学生的名字\n");
	char nname[20];
	scanf("%s",nname);
	Plink t=L;
	int f=0;
	for(int i=0;i<L->len;i++)
	{
		t=t->next;
		if(strcmp(t->data.name,nname)==0)
		{
		f=1;
		}
	}
	if(f=1)
	{
		printf("该学生存在\n");
	}
	else
	{
		printf("该学生不存在\n");
	}
}

函数声明 头文件:

#ifndef _FUN_H_
#define _FUN_H_
#include <myhead.h>
#define MAX 20
typedef struct
{
	char name[20];
	int age;
	int score;
	char num[20];
}stru,*Pstru;
typedef struct node
{
	union
	{
	 	stru data;
		int len;
	};
	struct node *next;
}Link,*Plink;

Plink creat_node();
void tail_input(Plink L,stru e);
void output_node(Plink L);
void dele_pos(Plink L);
void change_age(Plink L);
void find_name(Plink L);
#endif

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值