8.8今日份作业

1. 自定义顺序表,实现顺序表按照位置插入和删除功能。

#include <myhead.h>

#define MAX 30//宏定义最大存储容量
typedef int my_int;
typedef char STR[20];
typedef struct
{	
	STR name;//姓名
	my_int age;//年龄
	my_int score;//成绩
}stu;//学士信息结构体
typedef struct
{
	stu data[MAX];//最大存储容量MAX
	int len;//计数器,统计学生数量
}List,*Plist;

int main(int argc, const char *argv[])
{
	/*
	*/
	Plist L = malloc(sizeof(List));
	if(L == NULL)
	{
		perror("malloc faile\n");
	}
	L->len = 0;
	memset(L->data,0,sizeof(L->data));
	//调用申请空间函数

	printf("请输入学生信息:\n");
	int i;
	for(i = 0;i<5;i++)
	{
		printf("请输入第%d个学生信息:\n",i+1);	
		printf("请输入姓名:");
		scanf("%s",L->data[i].name);	
		printf("请输入年龄:");
		scanf("%d",&L->data[i].age);	
		printf("请输入成绩:");
		scanf("%d",&L->data[i].score);
		L->len++;//计数器+1
	}
	//循环输入5个学生信息
	printf("学生信息如下:\n");
	for(i = 0;i<L->len;i++)
	{
		printf("姓名:%s\t年龄:%d\t成绩:%d\n",
				L->data[i].name,L->data[i].age,
				L->data[i].score);
	}
	//循环输出n个学生信息

	my_int pos;
	stu e;
	printf("请输入你要插入的位置:");
	scanf("%d",&pos);
	printf("请输入你要插入的学生信息:\n");
	printf("姓名:");
	scanf("%s",e.name);
	printf("年龄:");
	scanf("%d",&e.age);
	printf("成绩:");
	scanf("%d",&e.score);

	//位置小于1,大于len+1,数组溢出,表空
	if(pos<1||pos>L->len+1||L->len == MAX||L == NULL)
	{
		printf("插入失败\n");
	}
	else
	{
		for(i = L->len-1;i>=pos-1;i--)
		{
			L->data[i+1] = L->data[i];
		}
		L->data[pos-1] = e;
		L->len++;
	}
	//按照位置插入一个学生
	printf("学生信息如下:\n");
	for(i = 0;i<L->len;i++)
	{
		printf("姓名:%s\t年龄:%d\t成绩:%d\n",
				L->data[i].name,L->data[i].age,
				L->data[i].score);
	}

	printf("请输入你要删除的位置:");
	scanf("%d",&pos);
	if(NULL == L||pos<1||pos>L->len||L->len == 0)
	{
		printf("删除失败\n");
	}
	else
	{
		for(i = pos-1;i<L->len;i++)
		{
			L->data[i] = L->data[i+1];
		}
		L->len--;
	}
	//按照位置删除一个学生
	printf("学生信息如下:\n");
	for(i = 0;i<L->len;i++)
	{
		printf("姓名:%s\t年龄:%d\t成绩:%d\n",
				L->data[i].name,L->data[i].age,
				L->data[i].score);
	}


	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值