c语言链表问题,请问一下我这个代码错在哪里,谢谢了

(1)学生信息的初始化(建表)
(2)按条件查找某个学生
(3)在要求的某个值的学生前插入一个新学生
这个是要求 我写的这个代码提示类型不符合 请问该怎么修改
还有我这个代码如果运行了能达到要求吗
#include
#include

define OK 1

define ERROR 1

struct stu
{
char name;
int id;
};
typedef struct Node
{
struct stu data;
struct Node *next;
}Node,*LinkList;

Node * Locate(LinkList L,int key)
{ Node p;int k=0;
p=L->next; //
从表中第一个结点比较 */
while(p!=NULL)
{
k++;
if(p->data.id!=key)
{
p=p->next;
}
else break;
}
if(p->next==NULL)
{
return (Node *)ERROR;

}
else return k;

//* 找到结点key,退出循环 * /
}

//在单链表L中第i个结点之前插入值为e的新结点
int InsList(LinkList L,int i,struct stu e)
{
Node p,*s;

int k=0;
if(i return ERROR;
p=L;
while(p!=NULL && k {
p=p->next; k=k+1;

}
if(p==NULL)

{ printf("插入位置不合理!");

return ERROR;
}
s=(Node
)malloc(sizeof(Node)); //为e申请一个新的结点
s->data=e; //将待插入结点的值e赋给s的数据域
s->next=p->next; p->next=s;

return OK;
}

int InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}

int CreateFromTail(LinkList L)
{
Node *r,*s;
struct stu c;
int flag=1;
r=L;
while(flag)
{
scanf("%s%d",&c.name,c.id);//注意改写
if(c.id=0)
{
s=(Node *)malloc(sizeof(Node));
s=(Node *)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}}

int PrintList(LinkList L)
{
LinkList p;
p=L;
while (p->next!=NULL)
{
p=p->next;
printf("%s %d\n",p->data.name,p->data.id);
}
}

int main()
{
LinkList L;
InitList(&L);
CreateFromTail(L);
PrintList(L);
int key;
scanf("%d",&key);
char pos=Locate(L,key);
struct stu e;
scanf("%s",e.name);
InsList(L,pos,e);
return 0;
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问