Problem F: 查询成绩(要求用链表完成)———(cin和scanf输入数据速度的差别)

本文介绍了一道关于链表操作的编程题,旨在查询特定学生的信息。通过使用尾结点添加数据和避免使用cin输入,文章详细展示了如何高效地创建链表并查询学生成绩。

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

这题主要考察链表的知识,比较基础,没有涉及插入比较排序之类的问题,但是这题还是有几个坑,我无一例外都踩上去了,导致浪费了很多时间。

Problem F: 查询成绩(要求用链表完成)

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1140 Solved: 102

Description

知道如何创建链表了。
本题继续要求用链表完成。输入同学成成绩后,现在再输入1个同学的姓名,输出该同学的成绩。

Input

输入一些学生的信息,每个学生信息一行,分别为学号、姓名和成绩,中间用空格隔开,其中学号和成绩均为整数,姓名为不超过15个仅包含大小写字母的字符。
如果输入的一行是非正整数时,表示结束
在成绩结束后,输入一行,为一个同学的姓名

Output

输出一个整数,表示该同学的成绩

Sample Input

1001 xiangwang 90
1002 xiaoli 85
1003 xiaohong 97
1004 xiaoma 76
-1
xiaoli

Sample Output

85

几个坑:
1.需要利用尾结点添加数据(这样能够节省时间,题目有时间限制)
2.不能用cin输入数据(从网上查得cin比scanf慢10倍左右,题目有时间限制)

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct Student 
{
	char name[20]; //姓名
	int num; //所得票数
	int score;
	Student *next;
};
void seek(char name[20],struct Student *head)	//查找功能
{
	struct Student *p=head;	
	while(strcmp(p->name,name)!=0)
	{
		p=p->next;
	}
	cout<<p->score<<endl;
}
int main()
{
	int num;
	struct Student *head=NULL,*last=NULL;
	struct Student *p;
	while(1)	//这里我将添加节点写在main函数中,但这不是一个好习惯,不推荐!
	{
		scanf("%d",&num);
		if(num<=0)	break;
		char name[20];
		int score;
		scanf("%s",name);
		scanf("%d",&score);
		p=new Student;
		strcpy(p->name,name);
		p->num=num;
		p->score=score;
		p->next=NULL;
		if(head==NULL)
		{
			head=p;
			last=head;
		}
		else 
		{
			last->next=p;
			last=p;
		}			
	}
	char name[20];
	scanf("%s",name);
	seek(name,head);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值