8.8作业

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

work.h

#ifndef _WORK_H_
#define _WORK_H_
#include <myhead.h>
#define MAX 20
typedef struct{
	char name[20];
	int age;
	char sex[10];
}people;

typedef struct{
	people p[MAX];
	int len;
}pele,*Pele;
void input_p(Pele p,int n);
void output_p(Pele p,int n);
void insert_pos(Pele p);
void delete_pos(Pele p);
int empty(Pele p,int pos);
#endif

fun.c

#include "work.h"

void input_p(Pele p,int n){
	printf("请输入人员信息:\n");
	for(int i=0;i<n;i++){
		printf("请输入第%d个人员信息:\n",i+1);
		printf("第%d个人姓名:",i+1);
		scanf("%s",p->p[i].name);
		printf("第%d个人年龄:",i+1);
		scanf("%d",&p->p[i].age);
		printf("第%d个人性别:",i+1);
		scanf("%s",p->p[i].sex);
		p->len++;
	}
}
void output_p(Pele p,int n){
	printf("人员信息如下:\n");
	for(int i=0;i<n;i++){
		printf("姓名:%s\t年龄:%d\t性别:%s\n",
				p->p[i].name,p->p[i].age,p->p[i].sex);
	}

}
int empty(Pele p,int pos){
	if(NULL == p || pos<1 || pos>p->len){
		return 1;
	}   
	return 0; 	
}
void insert_pos(Pele p){
	int pos;
	printf("请输入你要插入的位置:");
	scanf("%d",&pos);
	if(empty(p,pos)!=1){
		for(int i=p->len-1;i>=pos-1;i-- ){
			p->p[i+1] = p->p[i];
		}		
		printf("请输入插入人员的姓名:");
		scanf("%s",p->p[pos-1].name);
		printf("请输入插入人员的年龄:");
		scanf("%d",&p->p[pos-1].age);
		printf("请输入插入人员的性别:");
		scanf("%s",p->p[pos-1].sex);
		p->len++;
	}else {
		printf("输入的位置不合法,请重新输入\n");
		return insert_pos(p);
	}
}
void delete_pos(Pele p){
	int pos;
	printf("请输入你要删除的位置:");
	scanf("%d",&pos);
	if(empty(p,pos)!=1){
		for(int i=pos-1;i<p->len;i++){
			p->p[i] = p->p[i+1];
		}
		p->len--;

	}else{
		printf("输入的位置不合法,请重新输入");
		return delete_pos(p);
	}
}

work.c

#include "work.h"

int main(int argc, const char *argv[])
{
	Pele p = malloc(sizeof(pele));
	if(p==NULL){
        perror("malloc faile\n");
        printf("申请空间错误!\n");
    }
    p->len = 0;//长度初始值为0
    memset(p->p,0,sizeof(p->p));
	input_p(p,4);
	output_p(p,p->len);
	//按照位置插入
	insert_pos(p);
	output_p(p,p->len);
	//按照位置删除
	delete_pos(p);
	output_p(p,p->len);
	return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值