建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现Word文档格式.docx
《建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
#include<
iostream>
iomanip>
usingnamespacestd;
struct
node
{int
num;
char
name[10];
float
score;
*next;
};
class
linked_list
{private:
node*head;
public:
linked_list();
voidprt_linked_list();
voidins_num_linked_list(inti,node*b);
voidins_name_linked_list(charname[],node*b);
intdel_num_linked_list(node);
intdel_name_linked_list(node);
intsear_num_linked_list(int);
voidsear_name_linked_list(node);
voidcount_linked_list();
}
/*建立链表*/linked_list:
:
linked_list()
{node*p,*q;
p=newnode;
q=newnode;
p->
num=101;
strcpy(p->
name,"
aaa"
);
p->
score=98;
q->
num=104;
strcpy(q->
ddd"
q->
score=95;
head=p;
next=q;
next=NULL;
return;
/*输出*/
voidlinked_list:
prt_linked_list()
{node*p;
p=head;
if(head==NULL){cout<
<
"
空链表!
”<
endl;
return;
}elsedo{cout<
num<
"
name<
score<
p=p->
next;
while(p!
=NULL);
/*按学号插入*/
ins_num_linked_list(inti,node*b)
{node*q;
if(head==NULL)
{b->
head=b;
if(head->
num==i)
next=head;
q=head;
while((q->
next!
=NULL)&
&
(((q->
next)->
num)!
=i))q=q->
if(q->
next==NULL){cout<
无此元素"
}b->
next=q->
next=b;
return
/*按姓名插入*/
ins_name_linked_list(charname[],node*b)
if(strcmp(head->
name,name)==0)
head=breturn;
(strcmp((q->
name,name)!
=0))
q=q->
/*按学号删除*/
intlinked_list:
del_num_linked_list(nodex)
return0;
num==x.num)
{p=head->
deletehead;
return1;
}q=head;
=x.num))q=q->
next==0){cout<
链表中无此元素"
p=q->
next=p->
deletep;
return1;
/*按姓名删除*/
del_name_linked_list(nodex)
name,x.name)==0)
name,x.name)!
return
/*按学号查找*/
sear_num_linked_list(inti){node*q;
((q->
=i))
if((q->
=i)
{cout<
cout<
/*按姓名查找*/
sear_name_linked_list(nodex)
}p=head;
while((p->
(strcmp(p->
name,x.name)!
=0))p=p->
if(strcmp(p->
=0)
/*计算*/
count_linked_list()
{floatsum=0,ave;
intn=0;
node*p;
if(p==0)
空链表"
elsewhile(p!
{sum=sum+p->
nxt;
n++;
ave=sum/n;
总分="
sum<
平均分="
ave<
/*主函数*/intmain()
{intmx;
linked_lists1;
while
(1)
{cout<
1.输出2.插入3.删除4.查找5.计算0.退出"
请输入0-5:
;
cin>
>
mx;
switch(mx)
{case1:
s1.prt_linked_list();
break;
case2:
{node*b=newnode;
intmx1;
1.按学号插入2.按姓名插入0.退出"
输入0-2:
cin>
mx1;
switch(mx1)
请输入要插入位置的学号(在此之前一位插入):
i;
请输入要插入的学号、姓名、成绩:
b->
num>
name>
score;
s1.ins_num_linked_list(i,b);
charname[10];
请输入要插入位置的姓名(在此之前一位插入):
name;
s1.ins_name_linked_list(name,b);
s1.prt_linked_list();
case0:
cout<
退出"
}break;
case3:
{intmx2;
nodex;
请输入要删除的:
1.按学号删除2.按姓名删除0.退出"
mx2;
switch(mx2)
{case1:
请输入要删除的学号:
x.num;
s1.del_num_linked_list(x);
请输入删除姓名
x。
name;
s1.del_name_linked_list(x);
case4:
{intmx3;
1.按学号查找2.按姓名查找0.退出"
mx3;
switch(mx3)
inti;
请输入要查找的学号:
break;
s1.sear_num_linked_list(i);
nodex;
请输入要查找的姓名:
x.name;
return0;
cas