#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
struct STU{
char name[20];
char stuno[10];
int age;
int score1;
int score2;
int score3;
};
typedef struct STU ElemType;
struct LIST
{
ElemType *elem;
int length;
int listsize;
};
typedef struct LIST List;
int init(List *L)//构造一个空的线性表L
{
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
int ListLength(List *L)
{
return
L->length;
}
int Insert_SqList(List *va, int i,ElemType x)
{
ElemType *p,*q, *newbase;
if(i<1||i>va->length+1) return ERROR;
if(va->length>=va->listsize){
newbase=(ElemType *)realloc(va->elem,(va->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
va->elem=newbase;
va->listsize+=LISTINCREMENT;
}
q=&(va->elem[i-1]);
for(p=&(va->elem[va->length-1]);p>=q;--p) *(p+1)=*p;
*q=x;
++va->length;
return OK;
}
int Delete_SqList(List *va, int i, ElemType *x)
{
ElemType *p,*q;
if(i<1||i>va->length) return ERROR;
p=&(va->elem[i-1]);
x=p;
q=va->elem+va->length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--va->length;
return OK;
}
void printlist(List *L)
{
int i;
for(i=0;i<L->length;i++)
{
printf("第%d个学生的信息:\n",i+1);
printf("姓名
:%s\n学号
:%s\n年龄:%d\n语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n",L->elem[i].name,L->elem[i].stuno,L->elem[i].age,L->elem[i].score1,L->elem[i].score2,L->elem[i].score3);
}
}
void main()
{ int i,w,n;
int j=1;
List list;
ElemType stu,k;
init(&list);
printf("输入要建立的线性表的长度:\n",n);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("输入第%d个学生的信息:\n",i);
printf("输入第%d个学生的姓名:\n",i);
scanf("%s",list.elem[i-1].name);
printf("输入第%d个学生的学号:\n",i);
scanf("%s",list.elem[i-1].stuno);
printf("输入第%d个学生的年龄:\n",i);
scanf("%d",&list.elem[i-1].age);
printf("输入第%d个学生的语文成绩:\n",i);
scanf("%d",&list.elem[i-1].score1);
printf("输入第%d个学生的数学成绩:\n",i);
scanf("%d",&list.elem[i-1].score2);
printf("输入第%d个学生的英语成绩:\n",i);
scanf("%d",&list.elem[i-1].score3);
list.length++;
}
printlist(&list);
while(1)
{
printf("请选择您要进行的操作 1. 插入2. 删除3. 退出\n");
scanf("%d",&i);
if(i==1)
{
printf("输入要插入的学生的信息:\n");
printf("输入要插入的学生的姓名:\n");
scanf("%s",stu.name);
printf("输入要插入的学生的学号:\n");
scanf("%s",stu.stuno);
printf("输入要插入的学生的年龄:\n");
scanf("%d",&stu.age);
printf("输入这个学生的语文成绩:\n");
scanf("%d",&stu.score1);
printf("输入这个学生的数学成绩:\n");
scanf("%d",&stu.score2);
printf("输入这个学生的英语成绩:\n");
scanf("%d",&stu.score3);
printf("输入要插入的位置:\n");
scanf("%d",&w);
Insert_SqList(&list,w,stu);
printf("插入一个学生后的学生的信息:\n");
printlist(&list);
}
else if(i==2)
{
printf("删除一个学生的信息:\n");
printf("输入要删除的元素在线性表中的位置:\n");
scanf("%d",&n);
Delete_SqList(&list,n,&k);
printf("删除一个学生后的学生的信息:\n");
printlist(&list);
}
else if(i==3)
exit(0);
}
}