自定义顺序表,实现顺序表按照位置插入和删除功能
mymain.c
#include"list.h"
int main (int argc, const char *argv[])
{
//申请堆区空间
Plist L=apply_area();
//初始化输入
input_stu(L,5);
//输出
output_stu(L);
//按位置插入
insert_stu(L);
output_stu(L);
//按位置删除
del_stu(L);
output_stu(L);
return 0;
}
list.c
#include"list.h"
//申请堆区空间
Plist apply_area(){
Plist L = malloc(sizeof(List));
if(L == NULL){
perror("malloc error!\n");
return NULL;
}
L->len = 0;
memset(L->data,0,sizeof(L->data));
return L;
}
//判断是插入的位置否为空
int empty(Plist L,int pos){
if(pos<0||L == NULL||pos>L->len||L->len==0){
return 1;
}else{
return 0;
}
}
//初始化输入
void input_stu(Plist L,int n){
printf("请输入学生信息\n");
int i;
for(i=0;i<n;i++){
printf("请输入第%d个学生的信息\n",i+1);
printf("请输入学生的姓名:");
scanf("%s",L->data[i].name);
printf("请输入学生的成绩:");
scanf("%d",&L->data[i].score);
L->len++;//计数器+1
}
}
//输出
void output_stu(Plist L){
printf("学生的信息如下:\n");
for(int i=0;i<L->len;i++){
printf("姓名:%s 成绩%d\n",
L->data[i].name,
L->data[i].score);
}
}
//按位置插入
void insert_stu(Plist L){
printf("请输入想要插入的位置:\n");
int pos;
scanf("%d",&pos);
if(pos<1||pos>L->len||L->len == MAX){
printf("插入失败!\n");
}else{
for(int i=L->len-1;i>=pos-1;i--){
L->data[i+1]=L->data[i];
}
printf("请输入该位置的姓名:\n");
char in_name[30];
scanf("%s",in_name);
strcpy(L->data[pos-1].name,in_name);
printf("请输入该位置的分数:\n");
int in_score;
scanf("%d",&in_score);
L->data[pos-1].score = in_score;
L->len++;
}
}
//按位置删除
void del_stu(Plist L){
printf("请输入删除学生的位置:\n");
int pos;
scanf("%d",&pos);
if(empty(L,pos)){
printf("删除失败!\n");
}else{
for(int i=pos-1;i<L->len;i++){
L->data[i]=L->data[i+1];
}
L->len--;
}
}
list.h
#ifndef _LIST_H_
#define _LIST_H_
#include<myhead.h>
#define MAX 30
typedef struct{
char name[30];
int score;
}stu;//学生信息结构体
typedef struct{
stu data[MAX];//结构体数组
int len;//成员长度
}List,*Plist;
Plist apply_area();
void input_stu(Plist L,int n);
void output_stu(Plist L);
void insert_stu(Plist L);
int empty(Plist L,int pos);
void del_stu(Plist L);
#endif