自定义顺序表,实现顺序表按照位置插入和删除功能1 #include "list.h"
1 #include "list.h"
2
3 int main(int argc, const char *argv[])
4 {
5 plist L =apply_area();
6 input_stu(L,3);
7 output_stu(L);
8 find_name(L);
9 find_pos(L);
10 dele_pos(L);
11 output_stu(L);
12 dele_age(L);
13 output_stu(L);
14 insert_pos(L);
15 output_stu(L);
16 change_pos(L);
17 output_stu(L);
18 change_score(L);
19 output_stu(L);
20 sort_stu(L);
21 output_stu(L);
22 my_free(L);
23
24
25
26 return 0;
27 }
1 #ifndef _LIST_H
2 #define _LIST_H
3 #include<myhead.h>
4 #define N 40
5 typedef int my_int;
6 typedef char ptr[20];
7 typedef struct
8 {
9 my_int age;//年龄
10 ptr name;//姓名
11 my_int score;//成绩
12 }stu;//学生信息结构体
13 typedef struct
14 {
15 stu data[N];//最大存储容量N
16 my_int len;//计数器,统计学生数量
17 }list,*plist;//定义结构体普通类型list,指针类型plist
18 plist apply_area();
19 int input_stu(plist,int);
20 void output_stu(plist);
21 void find_name(plist);
22 void find_pos(plist);
23 void dele_pos(plist);
24 int empty(plist,int);
25 void dele_age(plist);
26 void insert_pos(plist);
27 void change_pos(plist);
28 void change_score(plist);
29 void sort_stu(plist);
30 void my_free(plist);
31
32 #endif
#include"list.h"
plist apply_area()
{
plist p=malloc(sizeof(list));
if(p==NULL)
{
printf("malloc fail\n");
return NULL;
}
p->len=0;
memset(p->data,0,sizeof(p->data));
return p;
}
int input_stu(plist L,int n)
{
printf("请输入学生信息:\n");
for(int i=0;i<n;i++)
{
printf("请输入第%d个学生信息:\n",i+1);
printf("请输入学生年龄:");
scanf("%d",&L->data[i].age);
printf("请输入学生姓名:");
scanf("%s",L->data[i].name);
printf("请输入学生成绩:");
scanf("%d",&L->data[i].score);
L->len++;
}
return 0;
}
void output_stu(plist L)
{
printf("学生信息如下:\n");
for(int i=0;i<L->len;i++)
{
printf("%d\t%s\t%d\n",L->data[i].age,L->data[i].name,L->data[i].score);
}
}
void find_name(plist L)
{
ptr key;
printf("请输入学生姓名:");
//gets(key);
scanf("%s",key);
int sub=-1;
for(int i=0;i<L->len;i++)
{
if(strcmp(key,L->data[i].name)==0)
{
sub=i;
}
}
if(sub==-1)
{
printf("没有此人\n");
}
else
{
printf("查找成功,该学生在第%d个位置\n",sub+1);
}
}
int empty(plist L,int pos)
{
if(NULL==L||pos<1||pos>L->len||L->len==0)
{
return 1;
}
return 0;
}
void find_pos(plist L)
{
my_int pos;
printf("请输入学生位置:");
scanf("%d",&pos);
if(empty(L,pos))
{
printf("find fail\n");
}
else
{
printf("按照位置查找成功,学生是:%s,成绩为:%d\n",L->data[pos-1].name,L->data[pos-1].score);
}
}
void dele_pos(plist L)
{
my_int pos;
printf("请输入你要删除的位置:");
scanf("%d",&pos);
if(empty(L,pos))
{
printf("dele fail\n");
}
else
{
for(int i=pos-1;i<L->len;i++)
{
L->data[i]=L->data[i+1];
}
L->len--;
}
}
void dele_age(plist L)
{
my_int key,sub=-1,a[40]={0},p=0;
printf("请输入要删除的年龄:");
scanf("%d",&key);
for(int i=0;i<L->len;i++)
{
if(key==L->data[i].age)
{
sub=i;
a[p]=i;
p++;
}
}
if(sub==-1)
{
printf("该年龄的学生不存在\n");
}
else
{
for(int z=0;z<p;z++)
{
for(int j=a[z];j<L->len;j++)
{
L->data[j]=L->data[j+1];
}
L->len--;
}
}
}
void insert_pos(plist L)
{
my_int pos;
stu p={40,"严鹿",38};
printf("请输入插入位置:");
scanf("%d",&pos);
if(pos<1||pos>L->len+1||L==NULL||L->len==N)
{
printf("insert fail\n");
}
else
{
for(int i=L->len-1;i>=pos-1;i--)
{
L->data[i+1]=L->data[i];
}
L->data[pos-1]=p;
L->len++;
}
}
void change_pos(plist L)
{
my_int pos;
printf("请输入修改位置:");
scanf("%d",&pos);
if(empty(L,pos))
{
printf("chang fail\n");
}
else
{
strcpy(L->data[pos-1].name,"严鹿");
}
}
void change_score(plist L)
{
my_int key,sub=-1,a[40]={0},p=0;//x=0;
printf("请输入修改的成绩:");
scanf("%d",&key);
for(int i=0;i<L->len;i++)
{
if(key==L->data[i].score)
{
sub=i;
a[p]=i;
p++;
}
}
if(sub==-1)
{
printf("该分数的学生不存在\n");
}
else
{
for(int z=0;z<p;z++)
{
//x=a[z];
L->data[a[z]].score=80;
}
}
}
void sort_stu(plist L)
{
my_int min;
stu p;
for(int i=0;i<L->len-1;i++)
{
min=i;
for(int j=i;j<L->len;j++)
{
if(L->data[min].score>L->data[j].score)
{
min=j;
}
}
if(i!=min)
{
p=L->data[i];
L->data[i]=L->data[min];
L->data[min]=p;
}
}
}
void my_free(plist L)
{
free(L);
L=NULL;
}