建立一个学生成绩信息(包括学号、姓名、成绩)的单向链表,学生记录按学号由小到大顺序排列,要求实现对成绩信息的插入、修改、删除和遍历操作。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct stud_node{
char num[50];
char name[20];
int score;
struct stud_node *next;
}LNode,*LinkList;
int InitList(LinkList &L) //初始化
{
L=new LNode;
L->next =NULL;
printf("初始化成功!\n\n");
}
int CreateList(LinkList &L)
{
int n,i;
LNode *r,*p;
r=L;
printf("请输入要添加的成绩人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=new LNode;
printf("学号:");
scanf("%s",p->num);
printf("姓名:");
scanf("%s",p->name);
printf("成绩:");
scanf("%d",&p->score);
p->next=NULL;
r->next=p;
r=p;
}
printf("\n");
}
int ListInsert(LinkList &L) //插入
{
int j=0,i;
LNode *s,*p;
p=L;
printf("请输入要插入的位置:");
scanf("%d",&i);
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return 0;
s=new LNode;
printf("学号:");
scanf("%s",s->num);
printf("姓名:");
scanf("%s",s->name);
printf("成绩:");
scanf("%d",&s->score);
s->next=p->next;
p->next=s;
printf("\n");
}
int LocateELem(LinkList L) //查找
{
int flag=0;
char a[10];
LNode *p;
p=L->next;
printf("请输入要查找的名字:");
scanf("%s",a);
while(p)
{
if(strcmp(p->name,a)==0)
{
flag=1;
break;
}
p=p->next;
}
if(flag==1)
{
printf("学号\t姓名\t成绩\n");
printf("%s\t%s\t%d\n\n",p->num,p->name,p->score);
}
else
printf("没有找到这个学生!\n\n");
}
int ListDelete(LinkList &L) //删除
{
int i,j=0;
LNode *p,*q;
p=L;
printf("请输入要删除的位置:");
scanf("%d",&i);
while((p->next)&&(j<i-1))
{
p=p->next;
++j;
}
if((!p->next)||(j>i-1))
return 0;
q=p->next;
p->next=q->next;
delete q;
}
int ListPrintf(LinkList L) //输出
{
LNode *p,*s,*t;
char num[10],name[50];
int score;
p=L->next;
if(p==NULL)
{
printf("该链表为空!\n\n");
return 0;
}
printf("学号\t姓名\t成绩\n");
while(p)
{
s=p->next;
while(s)
{
t=s;
if(strcmp(p->num,t->num)>0)
{
strcpy(num,p->num);
strcpy(p->num,t->num);
strcpy(t->num,num);
strcpy(name,p->name);
strcpy(p->name,t->name);
strcpy(t->name,name);
score=p->score;
p->score=t->score;
t->score=score;
}
s=s->next;
}
p=p->next;
}
p=L->next;
while(p)
{
printf("%s\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
printf("\n");
}
int main()
{
int i;
LinkList L;
while (1)
{
printf("1.初始化\n2.添加\n3.插入\n4.查找\n5.删除\n6.排序输出\n其他退出\n");
printf("请输入你的选择:");
scanf("%d",&i);
switch (i)
{
case 1:
InitList(L);
break;
case 2:
CreateList(L);
break;
case 3:
ListInsert(L);
break;
case 4:
LocateELem(L);
break;
case 5:
ListDelete(L);
break;
case 6:
ListPrintf(L);
break;
default:
exit(0);
}
}
}