数据结构求助,急!
这是我编的一个顺序表,由于C语言得基础不牢,好多不会,代码有个大问题,希望高手指点,再提点关于编程的建议,不胜感激。
#include"stdio.h"
#include"malloc.h"
#include"conio.h"
#define maxsize 10
struct
{ char name[maxsize];
float num[maxsize];
float score[maxsize];
int last;
}sequenlist;
void InitList(sequenlist L) /*新建空链表*/
{ L -> last=0;
}
void CreatList(sequenlist L) /*初始化链表*/
{ int n,i;
int tmp1,tmp2;
char tmp3;
printf("请输入数据的个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("name[%d]=\n",i);
printf("num[%d]=\n",i);
printf("score[%d]=\n",i);
fflush(stdin);
scanf("%s",&tmp3);
scanf("%f",&tmp2);
scanf("%f",&tmp1);
L->name[i]=tmp3;
L->num[i]=tmp2;
L->score[i]=tmp1;
}
L->last=n-1;
printf("\n");
}
void ClearList(sequenlist L) /*清除链表*/
{
L->last=0;
}
int GetElem(sequenlist L,int i,sequenlist e) /*查找链表*/
{ int n;
n=L->last;
if(i==0)
return FALSE;
for(i=0;i<n;i++)
{ if((L.name[m]==e.name)&&(L.num[m]==e.num)&&(L.score[m]==e.score))
return(i);
}
else printf("找不到该值!\n");
return 0;
}
void PriorElem(sequenlist L,sequenlist cur_e,sequenlist pre_e) /*输出前驱*/
{
int i,j;
j=L->last;
if(j==0)
return 0;
for(i=1;i<j;i++)
{ if((L.name[i]==cur_e.name)&&(L.num[i]==cur_e.num)&&(L.score.[i]==cur_e.score))
pre_e.name=L.name[i-1];
pre_e.num=L.num[i-1];
pre_e.score=L.score[i-1];
printf("%s,%f,%f\n",pre_e.name,pre_e.num,pre_e.score);
else
printf("操作失败,pre_e无定义");
}
void NextElem(sequenlist L,sequenlist cur_e,sequenlist next_e) /*输出后继*/
{ int i,j;
j=L->last;
if(j==0)
return 0;
for (i=L->last;i>0;i--)
{ if((L.name[i]==cur_e.name)&&(L.num[i]==cur_e.num)&&(L.score.[i]==cur_e.score))
next_e.name=L.name[i+1];
next_e.num=L.num[i+1];
next_e.score=L.score[i+1];
printf("%s,%f,%f\n",next_e.name,next_e.num,next_e.score);
else
printf("操作失败,next_e无定义");
}
void ListInsert(sequenlist L,int i,sequenlist e) /*插入元素*/
{ int j;
if(L->last==maxsize-1)
{ printf("overflow");
return 0;
}
else if ((i<0)||(i>L-last))
{ printf("error,please input the ringht 'i'");
return 0;
}
else
for(j=L->last;j>=i;j--)
{ L->name[j+1]=L->name[j];
L-num[j+1]=L->num[j];
L->score[j+1]=L->score[j];
L->name[i]=e.name;
l->num[i]=e.num;
l->score[i]=e.score;
L-last=L->last+1;
} return (1);
}
void ListDelete(sequenlist L,int i,sequenlist e) /*删除元素*/
{ if ((i<0)||(i>L->last))
{ printf("error,please input the ringht 'i'");
return 0;
}
else
for (;i<L->last;i++)
{L->name[i]=L->name[i+1];
L->num[i]=L->num[i+1];
L->score[i]=L->score[i+1];
L->last=L->last-1;
e.name=l.name[i];
e.num=L.num[i];
e.score=L.score[i];
return e;
}
}
void printout(sequenlist L) /*输出链表*/
{ int i;
{ printf("***************name******************num***************score**************\n");
for(i=0;i<L->last;i++)
{printf(" %s %f %f ",L->name[i],L->num[i],L->score[i]);}
}
main()
{ sequenlist *L;
char cmd;
int m; struct X; int n;int k;
L=(sequenlist *)malloc(sizeof(sequenlist));
printf("\n****************************************************************************\n");
printf("\n***************************建立顺序表(C)************************************\n");
printf("\n***************************初始化顺序表(N)**********************************\n");
printf("\n***************************插入元素(I)**************************************\n");
printf("\n***************************输出前趋(O)**************************************\n");
printf("\n***************************输出后继(P)**************************************\n");
printf("\n***************************删除元素(D)**************************************\n");
printf("\n***************************按值查找(M)**************************************\n");
printf("\n***************************清除顺序表(Q)************************************\n");
printf("\n***************************输出顺序表(R)************************************\n");
printf("\n***************************退出系统(E)**************************************\n");
printf("\n****************************************************************************\n");
printf("\n作者:****\n");
do {
fflush(stdin);
scanf("%c",&cmd);
}
while((cmd!='C')&&(cmd!='N')&&(cmd!='I')&&(cmd!='O')&&(cmd!='p')&&(cmd!='D')&&(cmd!='M')&&(cmd!='Q')&&(cmd!='R')&&(cmd!='E'))
switch(cmd)
case 'C':
fflush(stdin);
InitList(L);break;
case 'N':
fflush(stdin);
CreatList(L);
printout(L);break;
case 'I':
printf("请输入你要插入的数据:\n");
fflush(stdin);
scanf("%s",&X.name);
scanf("%f",&X.num);
scanf("%f",&X.score);
printout(L);
printf("请输入你要插入的位置:");
scanf("%d",&m);
ListInsert(L,m,X);
printout(L);break;
case 'D':
printout(L);
printf("请输入你要删除数据的位置:\n");
fflush(stdin);
scanf("%d",&m);
ListDelete(L,m);
printout(L);break;
case 'O':
printf("请输入元素:");
scanf("%s",&X.name);
scanf("%f",&X.num);
scanf("%f",&X.score);
n=Getelem(L,m,X);
if(n!=0)
{ PriorElem(L,X,&pre_e);
else
printf("对不起,您输入的不是本线性表数据");}
case 'P':
printf("请输入元素:\n");
scanf("%s",&X.name);
scanf("%f",&X.num);
scanf("%f",&X.score);
n=Getelem(L,m,X);
if(n!=0)
{ GetElem(L,X,&pre_e);
else
printf("对不起,您输入的不是本线性表数据");
case 'D':
printout(L);
printf("请输入你要删除的位置:\n");
scanf("%d",&m);
pre_e=ListDelete(&L,i,e);
printf("删除数据元素为:%s,%f,%f\n",pre_e.name,pre_e.num,pre_e.score);
case 'M':
printf("请输入数据元素:");
scanf("%s",&X.name);
scanf("%f",&X.num);
scanf("%f",&X.score);
n=GetElem(L,n,X);
printf("该元素为第%d位",n);
case 'Q':
ClearList(&L);
printout(L);
case 'E':
clrscr(L);
}