/*
顺序表
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAXSIZE 100
typedef int Status; // 定义函数返回值类型
typedef struct{
char number[11];//学号
char name[20];//姓名
int score;//成绩
}Student;
typedef Student ElemType;
typedef struct{
Student *elem;//指向数据元素的基地址
int length;//线性表当前的长度
}SqList;
Status creatlist(SqList *L)//构造空表
{
L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
if(!L->elem) return 0;//表示 空间分配失败
else {
L->length=0;
return 1;
}
}
void input(Student *elem)//逐个录入学生信息
{
printf("姓名 ");
scanf("%s",elem->name);
printf("学号 ");
scanf("%s",elem->number);
printf("成绩 ");
scanf("%s",elem->score);
}
void output(Student *elem)
{
printf("姓名:%s\n学号:%s\n成绩:%s\n",elem->name,elem->number,elem->score);
}
int find(SqList &L,char str[])
{
int i;
for(i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].name,str)==0)
return i;
}
return 0;
}
/*
操作目的:给定一个学生信息,插入到表中指定的位置
初始条件: 已有线性表
操作结果: 插入指定位置(address1),得到新的线性表
/
void insert(SqList &L,int address1,ElemType information)
{
int i=L.length;
for(i;i>=address1;i--)
{
L.elem[i+1]=L.elem[i];
}
L.elem[i]=information;
L.length++;
}
/
操作目的:删除指定位置的学生记录
初始条件: 已有线性表
操作结果:删除指定位置信息,得到新的线性表
*/
Status deletelist(SqList &L,int address2)
{
int i;
for(i=address2;i<=L.length;i++)
{
L.elem[i]=L.elem[i+1];
}
L.length--;
}
int main()
{
SqList L;
ElemType information;
creatlist(&L);//构造空表
if(creatlist(&L)) printf("创建成功\n");
else printf("创建失败\n") ;
int N;//确定学生人数,逐个输入信息
printf("请输入想输入学生信息的人数:");
scanf("%d",&N);
int i;
for(i=1;i<=N;i++)
{
printf("正在输入第%d位学生信息\n",i);
input(&L.elem[i]);
}
for(i=0;i<N;i++)//逐个显示学生信息
output(&L.elem[i]);
char s[20];//定义数组,储存想寻找的名字信息
printf("请输入需要查找的姓名 ");
scanf("%s",s);
if(find(L,s)) output(&L.elem[find(L,s)]);
else printf("未录入此人信息
1.