Day 08 数据结构

#ifndef HHHHH
#define HHHHH
#define MAX 100
#include<myhead.h>
struct sth
{
	char name[10];
	int age;
	double score;
};
typedef struct 
{
	struct sth student[MAX];
	int len;
}cj,*cj_c;
//判断空值
int man(cj_c ptr);
//
int max(cj_c ptr);
cj_c num_1();//申请空间
//打印菜单
void menu();
//输入人数及信息
void num_11(cj_c ptr);
//成绩降序
void num_2(cj_c ptr );
//显示好差生信息
void num_3(cj_c ptr);
//查看信息
void num_4(cj_c ptr);
//插入信息
void num_5(cj_c ptr);
//删除信息
void num_6(cj_c ptr);
//改变信息
void num_7(cj_c ptr);
//查询信息
void num_8(cj_c ptr);
//添加信息
void num_9(cj_c ptr);
#endif
hq@ubun
#include"work1.h"

cj_c num_1()
{
	cj_c ptr=(cj_c)malloc(sizeof(cj));//申请空间
	if(ptr==NULL)
	{
		printf("申请失败\n");
		return NULL;
	}
	memset(ptr->student,0,sizeof(ptr->student));
	ptr->len=0;
	return ptr;
}
int man(cj_c ptr)
{
	return ptr->len==0;
}
int max(cj_c ptr)
{
	return ptr->len==MAX;
}
void menu()
{
printf("###0.退出菜单###\n");
printf("1.添加人数及信息\n");
printf("###2.成绩降序###\n");
printf("#3.好生差生信息#\n");
printf("#4.查看学生信息#\n");
printf("###5.插入信息###\n");
printf("###6.删除信息###\n");
printf("###7.修改信息###\n");
printf("###8.查询信息###\n");
printf("###9.添加信息###\n");
}
void num_11(cj_c ptr)//输入信息
{
	if(ptr==NULL)
	{
		printf("输入失败\n");
		return;
	}
	printf("请输入学生人数\n");
	scanf("%d",&ptr->len);
	for(int i=0;i<ptr->len;i++)
	{	
		printf("请输入学生姓名:");
		scanf("%s",ptr->student[i].name);
		printf("请输入学生年龄:");
		scanf("%d",&ptr->student[i].age);
		printf("请输入学生成绩:");
		scanf("%lf",&ptr->student[i].score);
		putchar(10);
	}
	printf("输入完成\n");
	return;
}
void num_2(cj_c ptr)
{
	if(ptr==NULL)
	{
		printf("排序失败\n");
		return;
	}
	for(int i =1;i<ptr->len;i++)
	{
		for(int j =0;j<ptr->len-i;j++)
		{
			if(ptr->student[j].score>ptr->student[j+1].score)
			{
				struct sth stemp=ptr->student[j+1];
				ptr->student[j+1]=ptr->student[j];
				ptr->student[j]=stemp;
			}
		}
	}
	for(int i=0;i<ptr->len;i++)
	{
		printf("%s\t%d\t%1lf\n",ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
	}
	printf("排序成功\n");
	return;
}
void num_3(cj_c ptr)
{
	int a=0;
	int b=0;
	double max=0;
	double man=ptr->student[0].score;
	for(int i=0;i<ptr->len;i++)
	{
		if(ptr->student[i].score>max)
		{
			max =ptr->student[i].score;
			a =i;
		}
	}
	printf("优生:%s\t%d\t%.1lf\n",ptr->student[a].name,ptr->student[a].age,ptr->student[a].score);
	for(int i=1;i<ptr->len;i++)
	{
	if(ptr->student[i].score>max)
		{
			man =ptr->student[i].score;
			b =i;
		}
	}
	if(b==0)
	{
		printf("差生:%s\t%d\t%.1lf\n",ptr->student[0].name,ptr->student[0].age,ptr->student[0].score);
	}
	else
		printf("差生:%s\t%d\t%.1lf\n",ptr->student[b].name,ptr->student[b].age,ptr->student[b].score);
	return;
}
void num_4(cj_c ptr)
{
	if(ptr==NULL)
	{
		printf("显示失败\n");
		return;
	}
			for(int i=0;i<ptr->len;i++)
	{
		printf("%s\t%d\t%.1lf\n",ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
	}
		printf("显示成功\n");
		return;
}
void num_5(cj_c ptr)
{		
	
		int a =0;
		printf("请插入的下标:");
		scanf("%d",&a);
	if(ptr==NULL||max(ptr)||a<0||a>ptr->len-1)
	{
		printf("插入失败\n");
	return;
	}
	for(int i=ptr->len-1;i>=a;i--)
	{
		ptr->student[i+1]=ptr->student[i];
	}
	printf("请输入学生姓名:");
	scanf("%s",ptr->student[a].name);
	printf("请输入学生年纪:");
	scanf("%d",&ptr->student[a].age);
	printf("请输入学生成绩:");
	scanf("%lf",&ptr->student[a].score);
	ptr->len++;
	printf("插入完成\n");
	return;
}
void num_6(cj_c ptr)
{
		int a =0;
		printf("请删除的下标:");
		scanf("%d",&a);
	if(ptr==NULL||man(ptr)||a<0||a>ptr->len-1)
	{
		printf("删除失败\n");
	return;
	}
	for(int i=a+1;i<ptr->len-1;i++)
	{
		ptr->student[i-1]=ptr->student[i];
	}
	ptr->len--;
	return;
}
void num_7(cj_c ptr)
{
	int a=0;
	printf("请输入更改的信息下标:\n");
	scanf("%d",&a);
	if(ptr==NULL||man(ptr)||a<0||a>ptr->len-1)
	{
		printf("更改失败\n");
		return;
	}
	printf("请输入学生姓名:");
	scanf("%s",ptr->student[a].name);
	printf("请输入学生年纪:");
	scanf("%d",&ptr->student[a].age);
	printf("请输入学生成绩:");
	scanf("%lf",&ptr->student[a].score);
	printf("更改完成\n");
}
void num_8(cj_c ptr)
{
	int b=0;
	double a=0;
	printf("请输入学生成绩");
	scanf("%lf",&a);
	if(ptr==NULL||man(ptr))
	{
		printf("无法查询\n");
	}
	for(int i=0;i<ptr->len;i++)
	{
		if(ptr->student[i].score==a)
		{
			printf("%s\t%d\t%.1lf\n",ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
			printf("找到了!\n");
			b=1;
		}
	}
	if(b==0)
	{
		printf("找不到\n");
		return;
	}
	return;
}
void num_9(cj_c ptr)
{
	if(ptr==NULL||max(ptr))
	{
		printf("添加失败\n");
		return;
	}
	printf("请输入学生姓名:");
	scanf("%s",ptr->student[ptr->len].name);
	printf("请输入学生年纪:");
	scanf("%d",&ptr->student[ptr->len].age);
	printf("请输入学生成绩:");
	scanf("%lf",&ptr->student[ptr->len].score);
	if(ptr->student[ptr->len].age==0)
	{
		printf("添加失败\n");
		return;
	}
	printf("添加成功\n");
	ptr->len++;
	return;
}

#ifndef SEQLIST_H
#define SEQLIST_H
#include <myhead.h>
#define MAX 20
typedef int datatype;

typedef struct
{
	datatype data[MAX];
	int len;
}SeqList,*SeqListPtr;
//声明顺序表的创建函数
SeqListPtr list_create();
//判断空函数
int list_empty(SeqListPtr L);
//判断满函数
int list_full(SeqListPtr L);
//添加元素
int list_add(SeqListPtr L,datatype e);
//遍历顺序表
void list_show(SeqListPtr L);
//定义任意位置插入函数
int list_insert_pos(SeqListPtr L,int pos,datatype e);
//定义任意位置删除函数
int list_dalete_pos(SeqListPtr L,int pos);
//定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e);
//按位置进行修改
int list_update_pos(SeqListPtr L,int pos,datatype e);
//按值进行修改
int list_update_value(SeqListPtr L,datatype old_e,datatype new_e);

#endif
#include"ceshi1.h"

int main(int argc, const char *argv[])
{
	SeqListPtr L=list_create();
	if(L!=NULL)
	{
		printf("创建成功\n");
	}
	else
		return-1;
	list_add(L,520);
	list_add(L,1314);
	list_add(L,999);
	list_add(L,666);
	list_show(L);
	list_insert_pos(L,0,100);
	list_insert_pos(L,2,100);
	list_insert_pos(L,6,100);
	list_show(L);
	list_dalete_pos(L,3);
	list_show(L);
	int res =list_search_value(L,999);
	if(res>=0)
	{
		printf("你要找的元素在%d个位置\n",res+1);
	}
	list_update_pos(L,0,1234);
	list_show(L);
	list_update_value(L,999,888);
	list_show(L);

	
	return 0;
}
#include"ceshi1.h"


SeqListPtr list_create()
{

	SeqListPtr L=(SeqListPtr)malloc(sizeof(SeqList));
	if(NULL==L)
	{
	printf("申请失败\n");
	return NULL;
	}
	memset(L->data,0,sizeof(L->data));
	L->len=0;
	return L;
	
}
int list_empty(SeqListPtr L)
{
	return L->len==0;
}
int list_full(SeqListPtr L)
{
	return L->len==MAX;
}

int list_add(SeqListPtr L,datatype e)
{
	if(NULL==L||list_full(L))
	{
		printf("添加失败\n");
		return -1;
	}
	L->data[L->len]=e;
	L->len++;
	printf("添加成功");
	return 0;
}
void list_show(SeqListPtr L)
{
	if(L==NULL||list_empty(L))
	{
		printf("遍历失败\n");
		return;
	}
	for(int i=0;i<L->len;i++)
	{
		printf("%d/t",L->data[i]);
	}
	printf("\n");

}
int list_insert_pos(SeqListPtr L,int pos,datatype e)
{
	if(NULL==L||list_full(L)||pos>0||pos<L->len)
	{
		printf("插入失败\n");
	return -1;
	}
for(int i=L->len-1;i>=pos;i--)
{
	L->data[i+1]=L->data[i];
}
L->data[pos]=e;

L->len++;
printf("插入成功\n");
return 0;
}
int list_dalete_pos(SeqListPtr L,int pos)
{
	if(NULL==L||list_empty(L)||pos<0||pos>=L->len)
	{
		printf("删除失败\n");
		return 0;
	}
	for(int i =pos+1;i<L->len-1;i++)
	{
		L->data[i-1]=L->data[i];
	}
L->len--;
printf("删除成功\n");
return 0;
}
int list_search_value(SeqListPtr L,datatype e)
{
	if(NULL==L||list_empty(L))
	{
		printf("查找失败\n");
		return -1;
	}
	for(int i=0;i<L->len;i++)
	{
		if(L->data[i]==e)
			return i;
	}
printf("没找到\n");
return -1;
}
int list_update_pos(SeqListPtr L,int pos,datatype e)
{
	if(NULL==L||pos<0||pos>=L->len||list_empty(L))
	{
		printf("修改失败\n");
		return -1;
	}
	L->data[pos]=e;
	printf("修改成功\n");
	return 0;
}
int list_update_value(SeqListPtr L,datatype old_e,datatype new_e)
{
	if(NULL==L||list_empty(L))
	{
		printf("查找失败\n");
		return -1;
	}
int res=list_search_value(L,old_e);
if(res == -1)
{
	printf("没有要修改的值\n");
	return -1;
}
list_update_pos(L,res,new_e);
	printf("修改成功\n");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值