问题求助 初学数据结构 有好多知识不会 求助大神帮我看一下我的代码 问题附了图片
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
/**********************类型定义 ********************/
typedef struct
{
int no;
char name[MAXSIZE];
int grade;
} datatype;
typedef struct
{
datatype data[MAXSIZE];
int last;
} SeqList;
typedef struct node
{
datatype data[MAXSIZE];
struct node *next;
}LNode,*LinkList;
int compare(datatype *a,datatype *b)
{
return a->no-b->no;
}
/*******************线性表的基本操作***************************/
SeqList *init_SeqList()
{
SeqList *L;
L=(SeqList *)malloc(sizeof(SeqList));
if(L==NULL)
printf("内存分配失败\n");
else
L->last=-1;
return L;
}
int Insert_SeqList(SeqList *L,int i,datatype x)
{
int j;
if(L->last==MAXSIZE-1)
{
printf("表满");
return(-1);
}
if(i<1||i>L->last+2)
{
printf("位置错");
return(0);
}
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
return(1);
}
int Location_SeqList(SeqList *L,datatype x)
{
int i=0;
while(i<=L->last&&compare(&(L->data[i]),&x)!=0)
i++;
if(i>L->last)
return -1;
else
return i;
}
int Delete_SeqList(SeqList*L,int i)
{
int j;
if(i<1||i>L->last+1)
{
printf("不存在第%d个元素");
return (0);
}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return(1);
}
/**********************功能实现***************************/
void find(SeqList *L)
{
int no;
printf("请输入学生的学号:");
scanf("%d",&no);
datatype x;
x.no=no;
int i=Location_SeqList(L,x);
if(i==-1)
printf("查找失败");
else
printf("是第%d个学生",i);
}
LinkList Creat_LinkList()
{
LinkList L=NULL;
LNode *s,*r=NULL;
int x;
bool flag;
scanf("%d",&x);
while(x!=flag)
{
s=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
if(r!=NULL)
r->next=NULL;
return L;
}
LNode *Get_Linklist(LinkList L,datatype x,int i)
{
LNode *p=L->next;
p=p->next;
return p;
}
void Insert(SeqList *L)
{
int i;
int x;
if(i==-1)
printf("插入失败");
else
printf("请入要插入学生的学号:");
scanf("%d",&i);
printf("请入要插入的学生的姓名:");
scanf("%s",&x);
printf("请入要插入的学生的分数:");
scanf("%d",&i);
}
/*删除元素操作*/
void Delete(SeqList *L)
{
int i;
printf("请输入要删除元素所在的位置:");
scanf("%d",&i);
if(i==-1)
printf("删除失败");
else
printf("删除的是第%d个学生",i);
}
/**********************main函数***************************/
void printChoice()
{
printf("\n请选择功能:\n");
printf("\t1.查找\n");
printf("\t2.插入\n");
printf("\t3.删除\n");
printf("\t4.打印\n");
}
int main()
{
SeqList *L=init_SeqList();
int choice=-1;
while(1)
{
printChoice();
scanf("%d",&choice);
switch(choice)
{
case 1:
find(L);
break;
case 2:Insert(L);
break;
case 3:
Delete(L);
break;
default:
printf("输入错误");
break;
}
}
}