自定义顺序表,实现顺序表按照位置插入和删除功能
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;
}
运行结果