程序不知道哪里出错,一运行就崩溃,求助?
#include"stdio.h"
#include"stdlib.h"
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1 //不可执行
#define OVERFLOW -2 //溢出
typedef int status;
typedef int Elemtype; //将抽象数据类型Elemtype具体化为int类型
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*LinkList; //结点定义
status GetElem_L(LinkList L,int i, Elemtype &e){
int j;
LNode *p;
p=L->next;j=1; //初始化,p为第一个结点,j为记数器
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i) return ERROR; //第i个元素不存在
e=p->data; //取第i个元素
return OK;
}//查询函数
status ListInsert_L(LinkList &L,int i,Elemtype e){
int j;
LNode *p,*s;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;} //寻找第i-1个结点
if(!p||j>i-1) return ERROR; //i小于1或者大于表长加1
s=(LinkList)malloc(sizeof(LNode)); //生成新结点
s->data=e;s->next=p->next; //插入L中
p->next=s;
return OK;
}//插入函数
status ListDelete_L(LinkList &L,int i,Elemtype &e){
int j;
LNode *p,*q;
p=L;j=0;
while(p->next&&j<i-1){ //寻找第i个结点,并令p指向其前驱
p=p->next;++j;
}
if(!(p->next)||j>i-1) return ERROR; //删除位置不合理
q=p->next;p->next=q->next; //删除并释放结点
e=q->data;free(q);
return OK;
}//删除函数
status ListPrintf_L(LinkList &L,int i){
int j;
LNode *p;
p=L;j=1;
printf("学生成绩:\n");
while(p&&j<i){
printf("学号为%d号的成绩为:\t",j);
printf("%d",p->data);
p=p->next;
++j;
}
if(!p||j>i) return ERROR; //第i个元素不存在
return OK;
}//输出函数
void CreateList_L(LinkList &L,int n){
int i;
LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //先建立一个带头结点的单链表
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode)); //生成新结点
scanf("%d",&p->data); //输入元素值
p->next=L->next;L->next=p; //插入到表头
}
}//修改函数
void SortList_L(LinkList &La,LinkList &Lb){
LinkList pa,pb,pc,Lc=La;
pa=La->next;pc=Lc->next;
Lb=pb=La; //用La的头结点做Lb的头结点
while(pa&&pc){
if(pa->data<=pc->data){
pb->next=pa;pb=pa;pa=pa->next;
}
else{pb->next=pc;pb=pc;pc=pb->next;}
}
pb->next=pa?pa:pc; //插入剩余段
free(Lc); //释放Lc的头结点
}//排序函数
void main(){
LinkList list1=NULL,list2=NULL;
int mark[8][2]={{1,70},{2,85},{3,75}, {4,90},{5,60},{6,80}, {7,76},{8,50}};
int i,j=8,id;
Elemtype score;
for(i=1;i<=8;i++)
GetElem_L(list1,i,mark[i][1]);//此处有错
ListPrintf_L(list1,j);
/*增加学生成绩*/
printf("请输入要添加的学生学号:");
scanf("%d",&id);
printf("请输入要添加的学生成绩:");
scanf("%d",&score);
ListInsert_L(list1,id,score);j++;
ListPrintf_L(list1,j);
/*修改学生成绩*/
printf("请输入要修改的学生学号:");
scanf("%d",&id);
CreateList_L(list1,id);
ListPrintf_L(list1,j);
/*删除学生成绩*/
printf("请输入要删除的学生学号:");
scanf("%d",&id);
ListDelete_L(list1,id,score);j--;
ListPrintf_L(list1,j);
/*成绩低到高排序*/
SortList_L(list1,list2);
ListPrintf_L(list2,j);
}