仅仅给你实现一个最基本的链表和功能,许多细节你自己添加,比如没有判断有没有重复的学生信息输入,如id重复。
还有删除是依靠姓名删除的,因为你的题目含糊不清,很多学生的信息具体是什么你也没有给出,只能给你个最基本的studentid 如果还有学科成绩什么的 自己在结构体中添加吧
后面你自己改了 最基本的给你写好
#include
#include
#include
#include
typedef struct student student;
struct student{
int sid;//student id
char sname[30];
struct student *next;
};
//链表
student *linklist;
int len;
void init_linklist()
{
linklist=NULL;
len=0;
}
bool addstudent(int studentid,char *name)
{
student *p;
p=(student*)malloc(sizeof(student));
strcpy(p->sname,name);
p->sid=studentid;
len++;
p->next=linklist;
linklist=p;
return 1;
}
bool removestudent(char *name)
{
student *p=linklist;
student *tmp=p;
while(p!=NULL&&strcmp(p->sname,name)!=0)
{
tmp=p;
p=p->next;
}
if(p==NULL)//no find
return 0;
if(tmp==p)//说明是表头
{
linklist=p->next;
free(p);
len--;
return 1;
}
//非表头
tmp->next=p->next;
free(p);
len--;
return 1;
}
student* findstudent(char *name)
{
student *p=linklist;
while(p!=NULL&&strcmp(p->sname,name)!=0)
p=p->next;
if(p==NULL)
return 0;
else
return p;
}
void printlist()
{
student *p=linklist;
while(p!=NULL)
{
printf("name:%s studentID:%d\n",p->sname,p->sid);
p=p->next;
}
}
int main(void)
{
init_linklist();
addstudent(111,"limin");
addstudent(222,"xiaoc");
printlist();
removestudent("xiaoc");
printlist();
char na[30];
int si;
printf("input the student you want to add:\n");
scanf("%s %d",na,&si);
addstudent(si,na);
printlist();
return 0;
}