2024.7.18

定义一个顺序表,实现增删改查

1.seq.h

#ifndef SEQ_H
#define SEQ_H
#include<myhead.h>
#define MAX 20//顺序表最大容量
typedef int datatype;//数据元素类型
//定义顺序表结构类型
typedef struct 
{
	datatype data[MAX];//存放顺序表的数组
	int len;//顺序表的长度
}SeqList,*SeqPtr;

SeqPtr list_create();
//判空函数
int list_empty(SeqPtr L);
//判满函数
int list_full(SeqPtr L);
//添加元素
int list_add(SeqPtr L,datatype e);
//遍历顺序表
void list_show(SeqPtr L);
//定义任意位置插入函数
int list_insert(SeqPtr L,int pos,datatype e);
//定义任意位置删除函数
int list_delete(SeqPtr L,int pos);
//定义按值查找位置函数
int list_serach(SeqPtr L,datatype e);
//按位置进行修改
int list_update(SeqPtr L,int pos,datatype e);
//按值进行修改
int list_upvalue(SeqPtr L,datatype old,datatype new);
#endif

2.seq.c

#include"seq.h"
SeqPtr list_create()
{
	SeqPtr L=(SeqPtr)malloc(sizeof(SeqList));
	if(NULL==L)
	{
		printf("创建失败\n");
		return NULL;
	}
	memset(L->data,0,sizeof(L->data));
	L->len=0;
	printf("创建成功\n");
	return L;
}

int list_empty(SeqPtr L)
{
	return L->len==0;
}

int list_full(SeqPtr L)
{
	return L->len==MAX;
}

int list_add(SeqPtr L,datatype e)
{
	//判断逻辑
	if(NULL==L||list_full(L))
	{
		printf("添加失败\n");
		return -1;
	}
	//添加逻辑
	L->data[L->len] =e;
	//表的变化
	L->len++;
	printf("添加成功\n");
	return 0;
}

//遍历顺序表
void list_show(SeqPtr L)
{
	if(NULL==L||list_empty(L))
	{
		return;
	}
	printf("顺序表中的元素分别是:\n");
	for(int i=0;i<L->len;i++)
	{
		printf("%d\n",L->data[i]);
	}
	printf("\n");
	
}
//定义任意位置插入函数
int list_insert(SeqPtr L,int pos,datatype e)
{
	//判断逻辑
	if(list_full(L)||pos<0||pos>L->len||NULL==L)
	{
		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_delete(SeqPtr L,int pos)
{
	//判断逻辑
	if(NULL==L||pos<0||list_empty(L)||pos>=L->len)
	{
		return -1;
	}
	//删除逻辑
	for(int i=pos+1;i<L->len;i++)
	{
		L->data[i-1]=L->data[i];
	}
	//表长变化
	L->len--;
	printf("删除成功\n");
	return 0;
}
int list_serach(SeqPtr 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(SeqPtr 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_upvalue(SeqPtr L,datatype old,datatype new)
{
	if(NULL==L||list_empty(L))
	{
		printf("修改失败\n");
		return -1;
	}
	int res = list_serach(L,old);
	if(res == -1)
	{
		printf("没有要修改的值\n");
		return -1;
	}
	int r = list_update(L,res,new);
	printf("修改成功\n");
	return 0;
}

3.main.c

#include"seq.h"
int main(int argc, const char *argv[])
{
	SeqPtr L = list_create();
	if(NULL==L)
	{
		return -1;
	}
	//调用添加函数
	list_add(L,520);
	list_add(L,1314);
	list_add(L,666);
	list_add(L,999);

	list_show(L);
	list_insert(L,1,30);
	list_show(L);
	list_delete(L,1);
	list_show(L);
	int res = list_serach(L,666);
	if(res != -1)
	{
		printf("要找的元素在第%d个位置\n",res+1);
	}
	list_update(L,1,500);
	list_show(L);
	list_upvalue(L,500,123);
	list_show(L);
	return 0;
}

学生管理系统的增删改查

1.my.h

#ifndef TEST_H
#define TEST_H
#include<myhead.h>
#define MAX 100
struct Stu
{
	char name[20];
	int age;
	double score;
};
typedef struct Class
{
	struct Stu student[MAX];
	int size;
}s1,*s;
struct Class *create(int n);

void input(s p);

void sort(struct Class *p);

void maxandmin(struct Class *p);

void output(struct Class *p);

void destroy(struct Class **p);

int list_empty(s p);

int list_full(s p);

int add(s p);

int insert(s p);

int del(s p);

int update(s p);

int serach(s p);
#endif

2.tt.c

#include "my.h"
struct Class *create(int n)
{
	struct Class *ptr =(struct Class*)malloc(sizeof(struct Class));
	if(NULL == ptr)
	{
		printf("创建失败\n");
	}
	memset(ptr,0,sizeof(struct Class));
	ptr->size=n;
	return ptr;
}
void input(s p)
{
	for(int i=0;i<p->size;i++)
	{
		printf("输入第%d个学生的姓名:",i+1);
		scanf("%s",p->student[i].name);
		printf("输入第%d个学生的年龄:",i+1);
		scanf("%d",&p->student[i].age);
		printf("输入第%d个学生的成绩:",i+1);
		scanf("%lf",&p->student[i].score);
	}
	printf("录入成功\n");
}
void sort(struct Class *p)
{
	for(int i=1;i<p->size;i++)
	{
		for(int j=0;j<p->size-i;j++)
		{
			if(p->student[j].score<p->student[j+1].score)
			{
				struct Stu t = p->student[j];
				p->student[j] = p->student[j+1];
				p->student[j+1] = t;
			}
		}
	}
}
void maxandmin(struct Class *p)
{
	double t1=p->student[0].score;
	double t2=p->student[0].score;
	int count1 =0,count2=0;
	for(int i=0;i<p->size;i++)
	{
		if(t1<p->student[i].score)
		{
			t1=p->student[i].score;
			count1=i;
		}
		else if(t2>p->student[i].score)
		{
			t2=p->student[i].score;
			count2=i;
		}
	}
	printf("成绩最好的同学:%s\t%d\t%.2lf\n",p->student[count1].name,p->student[count1].age,p->student[count1].score);
	printf("成绩最差的同学:%s\t%d\t%.2lf\n",p->student[count2].name,p->student[count2].age,p->student[count2].score);
}
void output(struct Class *p)
{
	for(int i=0;i<p->size;i++)
	{
		printf("姓名\t年龄\t成绩\n");
		printf("%s\t%d\t%.2lf\n",p->student[i].name,p->student[i].age,p->student[i].score);
	}
}
void destroy(struct Class **p)
{
	if(NULL != *p)
	{
		free(*p);
		*p=NULL;
	}
}

int list_empty(s p)
{
	return p->size==0;
}

int list_full(s p)
{
	return p->size==MAX;
}
int add(s p)
{
	if(NULL==p||list_full(p))
	{
		printf("添加失败\n");
		return -1;
	}
	printf("请添加姓名:");
	scanf("%s",p->student[p->size].name);
	printf("请添加年龄:");
	scanf("%d",&p->student[p->size].age);
	printf("请添加成绩:");
	scanf("%lf",&p->student[p->size].score);
	printf("添加成功\n");
	p->size++;
	return 0;
}

int insert(s p)
{
	printf("请输入插入的位置:");
	int pos=0;
	scanf("%d",&pos);
	if(NULL==p||list_full(p)||pos<0||pos>p->size)
	{
		printf("插入失败\n");
		return -1;
	}
	for(int i=p->size-1;i>=pos;i--)
	{
		p->student[i+1]=p->student[i];
	}
	printf("输入你要插入的学生的姓名:");
	scanf("%s",p->student[pos].name);
	printf("输入你要插入的学生的年纪:");
	scanf("%d",&p->student[pos].age);
	printf("输入你要插入的学生的成绩:");
	scanf("%lf",&p->student[pos].score);
	printf("插入成功\n");
	p->size++;
	return 0;
}

int del(s p)
{
	printf("请输入要删除的位置:");
	int pos=0;
	scanf("%d",&pos);
	if(NULL==p||list_empty(p)||pos>=p->size||p<0)
	{
		printf("删除失败\n");
		return -1;
	}
	for(int i=pos;i<p->size;i++)
	{
		p->student[i]=p->student[i+1];
	}
	printf("删除成功\n");
	p->size--;
	return 0;
}

int update(s p)
{
	printf("请输入修改的位置和成绩:");
	int pos=0;
	double score=0;
	scanf("%d,%lf",&pos,&score);
	if(NULL==p||list_empty(p)||pos<0||pos>=p->size)
	{
		printf("修改失败\n");
		return -1;
	}
	p->student[pos].score=score;
	printf("修改成功\n");
	return 0;
}

int serach(s p)
{
	printf("请输入你要查找的学生的姓名");
	char a[20]={0};
	scanf("%s",a);
	if(NULL==p||list_empty(p))
	{
		printf("查找失败\n");
		return -1;
	}
	for(int i=0;i<p->size;i++)
	{
		if(!strcmp(p->student[i].name,a))
		{
			return i;
		}
	}
	printf("查无此人\n");
	return 0;
}

3.main.c

#include "my.h"
int main(int argc, const char *argv[])
{
	int menu=0,n=0;
	printf("输入班级的实际人数:");
	s p=NULL;
	scanf("%d",&n);
	p = create(n);	
	while(1)
	{
		printf("\t\t学生管理系统\n");
		printf("\t\t1.输入班级学生信息\n");
		printf("\t\t2.降序\n");
		printf("\t\t3.成绩最好和最差学生信息\n");
		printf("\t\t4.输出学生信息\n");
		printf("\t\t5.添加学生信息\n");
		printf("\t\t6.插入学生信息\n");
		printf("\t\t7.删除成绩\n");
		printf("\t\t8.修改成绩\n");
		printf("\t\t9.查找学生\n");
		printf("\t\t0.退出系统\n");
		printf(">>>请输入:");
		scanf("%d",&menu);
		switch(menu)
		{
			case 1:
				{
					input(p);
				}
				break;
			case 2:
				{
					sort(p);
				}
				break;
			case 3:
				{
					maxandmin(p);
				}
				break;
			case 4:
				{
					output(p);
				}
				break;
			case 5:
				{
					add(p);
				}
				break;
			case 6:
				{
					insert(p);
				}
				break;
			case 7:
				{
					del(p);
				}
				break;
			case 8:
				{
					update(p);
				}
				break;
			case 9:
				{
					int n=serach(p);
					printf("你要查找的学生在第%d个位置\n",n+1);
				}
				break;
			case 0:
				{
					return 0;		
				}			
		}
	}
	destroy(&p);
	return 0;
}
ubuntu@ubuntu:hmk$ gcc *.c
ubuntu@ubuntu:hmk$ ./a.out 
输入班级的实际人数:2
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:1
输入第1个学生的姓名:wang
输入第1个学生的年龄:18
输入第1个学生的成绩:95
输入第2个学生的姓名:fang
输入第2个学生的年龄:18
输入第2个学生的成绩:100
录入成功
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
wang	18	95.00
姓名	年龄	成绩
fang	18	100.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:2
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
fang	18	100.00
姓名	年龄	成绩
wang	18	95.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:3
成绩最好的同学:fang	18	100.00
成绩最差的同学:wang	18	95.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:5
请添加姓名:li 
请添加年龄:17
请添加成绩:70
添加成功
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
fang	18	100.00
姓名	年龄	成绩
wang	18	95.00
姓名	年龄	成绩
li	17	70.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:6
请输入插入的位置:1
输入你要插入的学生的姓名:zhang
输入你要插入的学生的年纪:18
输入你要插入的学生的成绩:80
插入成功
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
fang	18	100.00
姓名	年龄	成绩
zhang	18	80.00
姓名	年龄	成绩
wang	18	95.00
姓名	年龄	成绩
li	17	70.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:7
请输入要删除的位置:1
删除成功
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
fang	18	100.00
姓名	年龄	成绩
wang	18	95.00
姓名	年龄	成绩
li	17	70.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:8
请输入修改的位置和成绩:1,99
修改成功
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:4
姓名	年龄	成绩
fang	18	100.00
姓名	年龄	成绩
wang	18	99.00
姓名	年龄	成绩
li	17	70.00
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:9
请输入你要查找的学生的姓名wang
你要查找的学生在第2个位置
		学生管理系统
		1.输入班级学生信息
		2.降序
		3.成绩最好和最差学生信息
		4.输出学生信息
		5.添加学生信息
		6.插入学生信息
		7.删除成绩
		8.修改成绩
		9.查找学生
		0.退出系统
>>>请输入:0
ubuntu@ubuntu:hmk$ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值