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;
}