c语言建立一个链表,每个结点包括姓名和成绩,【C++】建立一个学生信息链表,每个结点包括:学号、姓名、成绩。【原创技术】...

本文介绍了如何使用C++建立一个包含学号、姓名和成绩的学生信息链表。通过示例代码展示了链表的初始化、显示和查询功能,其中查询功能根据学号查找并显示对应的学生信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。

源代码:

//科目:C++实验3

//题目:建立一个学生信息链表,每个结点包括:学号、姓名、成绩。

//语言:C++

//作者:武叶

//创作时间:2012年3月20日

#include

using namespace std;

static int N=0; //定义N记录学生人数

/****定义结构体类型****/

typedef struct Node

{

int num;

char name[10];

float score;

struct Node *next;

}stNode;

/******初始化链表*******/

stNode * initlist()

{

struct Node *head; //定义头指针

struct Node *p1,*p2;

p1=p2=new Node; //使p1,p2指向新的结点

cout<

cin>>p1->num;cin>>p1->name;cin>>p1->score;

head=NULL;

while(p1->num!=0)

{ //输入学号以0结束

N++; //学生记录加1

if(N==1)

head=p1;

else

p2->next=p1;

p2=p1; //使p1指向结点尾

p1=new Node; //申请新的结点,存放下个记录

cin>>p1->num; cin>>p1->name;cin>>p1->score;

}

p2->next=NULL;

return(head); //返回头指针

}

/************显示链表内容*********/

void dispStLink(struct Node *head)

{

struct Node *p;

p=head;

cout<

for(int i=0;i<=20;i++)

{

cout<num<name<score<next;

}

}

/*******查找结点*********/

stNode *search(struct Node *head,int number)

{

int k=0,j=N;

struct Node *p3;

p3=head;

while(j!=0){

if(p3->num==number)

{

cout<

cout<num<name<score<

}

else

p3=p3->next;

k++; //k记录链表中不等于查找学号的个数

j--;

}

if(k==N) {cout<

return 0;

}

/********删除结点*********/

stNode * del(struct Node *head)

{

int num2,k=N;

struct Node *p4,*p5;

cout<>num2;

p4=head;

while(num2!=p4->num&&p4->next!=NULL)

{ //没有删除结点的信息且指针不在结尾

p5=p4;

p4=p4->next;

} //指针后移

if(num2==p4->num)

{

if(p4==head)

head=p4->next;

else

p5->next=p4->next;

cout<

cout<

cout<num<name<score<

cout<

N=N-1; //使总纪录数减1

}

else

{

cout<

}

return(head);

}

/**********创建结点**********/

int createStLink(struct Node *head,struct Node *stu)

{

struct Node *p6,*p7,*p8;

p7=head;

p6=stu;

if(head==NULL)

{

head=p6;p6->next=NULL;

}

else

{ //如果链表为空则在头结点创建信息

while(p6->num > p7->num && p7->next!=NULL)

{

p8=p7;

p7=p7->next;

}

if(p6->num<=p7->num)

{

if(head==p7)

head=p6;

else

p8->next=p6;

p6->next=p7;

}

else

{

p7->next=p6;p6->next=NULL;

}

}

N++;

return 1;

}

int main()

{

struct Node *H,*stud;

char M;

int num1;

H=initlist();

/******建立菜单*****/

while(M!='5')

{

if(H==NULL)

return 0;

else

{

cout<

cout<

<< "3、显示结点信息"<

cout<

cin>>M;

switch(M)

{

case '1':

cout<

case '2':

cout<

cin>>num1;

search(H,num1);

break;

case '3':

cout<

dispStLink(H);

break;

case '4':

H=del(H);

if(H==NULL)

cout<

break;

stud=new Node;

cin>>stud->num;

cin>>stud->name;

cin>>stud->score;

createStLink(H,stud);

dispStLink(H);

break;

}

}

}

cout<

return 0;

}

更多详细内容::::去学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值