结构体和链表例题2

这篇具有很好参考价值的文章主要介绍了结构体和链表例题2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、成绩系统之输入输出

题目描述

陈老师布置同学们完成一个小型的成绩管理系统,据说完成后至少可以有200行以上的代码,这可是课程学习到现在最大的编码量了。一下子写这么大的一个程序你可能会觉得无从着手,所以老师希望你先从输入输出开始。已知有n个学生,每个学生信息包含学号、姓名、性别、3门课程成绩,现在请你设计两个函数,完成学生信息的输入和输出,并在主程序中得到检测。

输入要求

先输入一个整数n表示有n个学生信息。(假设学生最多有50人)。接下来输入这n个学生的学号、姓名(不超过20个字符,可能带空格)、性别、3门课程成绩。每个学生输入中第一行输入学号、姓名,第二行包括性别、3门课成绩,具体见样例。

输出要求

输出n个学生的信息,按照输入的顺序

输入样例

2

15001 Peter Li

m 90 91 92

15002 Susan Wang

f 81 82 83

输出样例

---Student Information---

15001    Peter Li                  m 90 91 92

15002     Susan    Wang       f 81 82 83

代码示例:文章来源地址https://www.toymoban.com/news/detail-780426.html

#include<stdio.h>
typedef struct student
{
	int ID;
	char Name[20];
	char Gender;
	int score[3];
}STU;
STU s[50];

void add(STU *p,int n);
void disp(STU st);

int main()
{
	int n,i;
	scanf("%d",&n);
	add(s,n);
	printf("---Student Information---\n");
	for(i=0;i<n;i++)
	{
		disp(s[i]);
	}
	return 0;
}
void add(STU *p,int n)
{
	int j;
	for(p=s;p<s+n;p++)
	{
		scanf("%d",&(*p).ID);
		gets((*p).Name);
		scanf("%c",&(*p).Gender);
		for(j=0;j<3;j++)
		{
			scanf("%d",&(*p).score[j]);
		}
	}
}
void disp(STU st)
{
	int j;
	printf("%d ",st.ID);
	printf("%-20s ",st.Name);
	printf("%c ",st.Gender);
	for(j=0;j<3;j++)
	{
		printf("%d ",st.score[j]);
	}
	printf("\n");
}

2、成绩系统之平均成绩

题目描述

陈老师布置同学们完成一个小型的成绩管理系统,现在希望你设计其中的一个求平均值的模块。已知有n个学生,每个学生信息包含学号、姓名、性别、3门课程成绩,现在请你设计函数,完成对每个学生3门课程求平均,并输出相应信息。

输入要求

先输入一个整数n表示有n个学生信息。(假设学生最多有50人)。接着输入这n个学生的学号、姓名(不超过20个字符,可能带空格)、性别、3门课程成绩。

输出要求

输出每个学生的学号、姓名、3门课程成绩以及平均成绩(保留1位小数)

输入样例

2

15001 Peter Li m 90 91 92

15002 Susan Wang f 81 82 83

输出样例

---Student Information---

15001    Peter Li                  m 90 91 92

15002     Susan    Wang       f 81 82 83

代码示例:

#include<stdio.h>
typedef struct student
{	int ID;
	char Name[20];
	char Gender;
	int score[3];
	double ave;
}STU;


void add(STU *p,int size);     //函数,实现学生的信息输入
void average(STU *p,int size);  //函数,求学生平均成绩
void disp(STU *p,int size);    //函数,实现学生的信息输出

int main()
{
   STU s[50];
	int n;
	scanf("%d",&n);
	add(s,n);    
	average(s,n);
	disp(s,n);
	return 0;
}

void add(STU *p,int size)
 {
	int i,j;
	for(i=0;i<size;i++,p++)
	 {
		 scanf("%d",&p->ID);
		 gets(p->Name);
		 scanf("%c",&(*p).Gender);
		for(j=0;j<3;j++)
		{
			scanf("%d",&(*p).score[j]);
		}
	}
}  
void average(STU *p,int size)
{
   	int i,j;
	for(i=0;i<size;i++,p++)
	{
		double sum=0;
		for(j=0;j<3;j++)
		{
			sum+=(*p).score[j];
			(*p).ave=sum/3.0;
		}
	}
}      
void disp(STU *p,int size)
{
    int i,j;

	printf("---Student Information---\n");
	for(i=0;i<size;i++)
	{
	printf("%d ",p->ID);
	printf("%-20s ",p->Name);
	for(j=0;j<3;j++)
		printf("%d ",p->score[j]);
	printf("%.1lf ",p->ave);
	printf("\n");
	p++;
	}
}

3、考试之后

题目描述

又是一次期中考。考完之后肯定少不了成绩的排名。可是面对这么多的成绩,老师也觉得累。于是向熟悉编程的你求助。计入排名的考试只有语文数学跟英语三门。按照平均分从高到低输出。

输入要求

先输入一个整数n,表示有n个学生。(0 < n < 300)

 接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。

输出要求

按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。

输入样例

4

1023 88 75 65

1033 99 59 70

1187 77 82 83

1054 64 86 92

输出样例

1054 64 86 92

1187 77 82 83

1023 88 75 65

1033 99 59 70

代码示例:

#include<stdio.h>
typedef struct student
{
    int num;
    int yuwen;
    int shuxue;
    int yingyu;
    double ave;
}STU;
int main()
{
    int n,i,j;
    scanf("%d",&n);
    STU s[n],temp;
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d%d",&s[i].num,&s[i].yuwen,&s[i].shuxue,&s[i].yingyu);
        s[i].ave=(s[i].yuwen+s[i].shuxue+s[i].yingyu)/3.0;
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(s[j].ave==s[j+1].ave)
            {
                if(s[j].num>s[j+1].num)
                {
                    temp=s[j];
                    s[j]=s[j+1];
                    s[j+1]=temp;
                }
            }
            else if(s[j].ave<s[j+1].ave)
            {
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    } 
    for(i=0;i<n;i++)
    {
        printf("%d %d %d %d\n",s[i].num,s[i].yuwen,s[i].shuxue,s[i].yingyu);
    }
    return 0;
}

4、动态链表的建立和查询

题目描述

建立一个有若干个学生信息的单向链表,并对链表进行查询和输出,学生信息包括学号、姓名、一门课程成绩

输入要求

从键盘输入若干学生信息,以学号输入0作为结束标记。其中,假设有效分数都在0~100之间。

输出要求

输出所有学生的信息。每个学生的信息占据一行。如果链表为空,则输出“LinkList is Null”,输出不包含双引号。

输入样例

1011

anney

89

1012

frank

91

1013

susan

94

0

输出样例

1011 anney 89

1012 frank 91

1013 susan 94

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 21
typedef struct student
{
    long ID;
    char name[N];
    int score;
    struct student *next;
}STU;
 
STU *CreateList()
{
    STU *head = NULL, *p, *q, *r;
    p = (STU *)malloc(sizeof(STU));
    head = p;
    if(head == NULL)
    {
        printf("LinkList is Null\n");
        exit(0);
    }
    q = p;
    r = head;
    scanf("%ld", &q->ID);
    while(q->ID != 0)
    {
        getchar();
        scanf("%s", q->name);
        scanf("%d", &q->score);
        p = (STU *)malloc(sizeof(STU));
        q->next = p;
        r = q;
        q = p;
        scanf("%ld", &q->ID);
    }
    r->next = NULL;
    return head;
}
 
void PrintList(STU *head)
{
    STU *p;
    p = head;
    if(p->ID == 0)
    {
        printf("LinkList is Null\n");
        exit(0);
    }
    while(p != NULL)
    {
        printf("%ld ", p->ID);
        printf("%s", p->name);
        printf(" %d\n", p->score);
        p = p->next;
    }
    return;
}
 
void FreeList(STU *head)
{
    STU *p = head, *q;
    while(p != NULL)
    {
        q = p -> next;
        free(p);
        p = q;
    }
    return;
}
 
int main()
{
    STU *head;
    head = CreateList();
    PrintList(head);
    FreeList(head);
    return 0;
}

5、链表插入

题目描述

给定一串数字,用链表结构进行存储。然后给定针对该链表的若干插入操作,要求将执行插入操作后的结果输出。

输入要求

第一行:输入一个整数n,表示这串数字有n个(n大于等于1)。

第二行:输入这n个整数。

第三行:输入一个整数m,表示需要执行m个插入操作。

后面m行:每行输入两个整数a和b,表示在这串数字的当前第a个数字之后插入数字b。(假设链表第一个节点编号为1)

输出要求

输出操作后的n+m个数字。每个数字用空格空开(最后一个数字后面没有空格,直接换行)。

输入样例

3

2 1 3

2

1 5

1 6

输出样例

2 6 5 1 3

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct date
{
    int date;
    struct date *next;
}DATE;
DATE *CreateList(int n)
{
    DATE *head, *p, *q;
    int i;
    p = (DATE *)malloc(sizeof(DATE));
    head = p;
    scanf("%d", &p->date);
    q = p;
    for(i = 1; i < n; i++)
    {
        p = (DATE *)malloc(sizeof(DATE));
        scanf("%d", &p->date);
        q->next = p;
        q = p;
    }
    q->next = NULL;
    return head;
}
void InsertList(DATE *head, int a, int b)
{
    DATE *p, *q, *r;
    int i;
    p = head;
    r = (DATE *)malloc(sizeof(DATE));
    r->date = b;
    for(i = 1; i < a; i++)
    {
        p = p->next;
    }
    q = p->next;
    p->next = r;
    r->next = q;
    return;
}

void PrintList(DATE *head)
{
    DATE *p;
    int flag = 1;
    p = head;
    while(p != NULL)
    {
        if(flag)
        {
            printf("%d", p->date);
            flag = 0;
        }
        else
            printf(" %d", p->date);
        p = p->next;
    }
    printf("\n");
    return;
}

void FreeList(DATE *head)
{
    DATE *p, *q;
    p = head;
    while(p != NULL)
    {
        q = p->next;
        free(p);
        p = q;
    }
    return;
}

int main()
{
    int n, m, a, b;
    DATE *head;
    scanf("%d", &n);
    head = CreateList(n);
    scanf("%d", &m);
    while(m--)
    {
        scanf("%d%d", &a, &b);
        InsertList(head, a, b);
    }
    PrintList(head);
    FreeList(head);
    return 0;
}

到了这里,关于结构体和链表例题2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:2_顺序表和链表

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的 ,线性表在物理上

    2024年01月18日
    浏览(55)
  • 【数据结构初阶】顺序表和链表(1)

    线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上

    2024年02月08日
    浏览(242)
  • 数据结构奇妙旅程之顺序表和链表

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年02月05日
    浏览(67)
  • 【手撕数据结构】(三)顺序表和链表

    🎗️线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 🎗️线性表在逻辑上是线性结构,也就说是一条连续的直线。但是在物理结构上并不一定是连续的,线性表在物理上存储

    2024年02月05日
    浏览(55)
  • 数据结构修炼第二篇:顺序表和链表

    第一章 时间复杂度和空间复杂度 第二章 顺序表,列表 第三章 栈和队列 第四章 二叉树 第五章 排序 作者:🎈乐言🎈 简介:🎈大一学生,目前在致力于c/c++/python,高数的学习,有问题尽管问我,关注后私聊! 持续更新专栏:《c进阶》,《数据结构修炼》 🚀 (优质好文持

    2024年02月02日
    浏览(118)
  • 数据结构(王道)——线性表之静态链表&顺序表和链表的比较

      如何定义一个静态链表     初始化静态链表:   静态链表的查找、插入、删除           创: 销:   增、删:   查:   顺序表、链表该如何选择?  

    2024年02月16日
    浏览(126)
  • 初阶数据结构之---顺序表和链表(C语言)

    线性表: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构,也就是说是连续的一条直线。但在物理上并不一定是连续的。线性表在物理上存储时,通常以 数组 和 链式结构 的形式存储。

    2024年02月22日
    浏览(67)
  • 计算机程序设计-第9周(结构应用和链表)

    任务描述 本关任务:编写程序,定义一个结构date,包含年、月、日三个整型数据成员,使用结构date声明包含5个数组元素的结构数组,依次输入5个数组元素的值,按日期先后对数组进行排序,输出排序的结果。 测试说明 平台会对你编写的代码进行测试,并且约定输入输出的

    2024年02月12日
    浏览(38)
  • 【数据结构篇C++实现】- 线性表 - 顺序表和链表

    友情链接:C/C++系列系统学习目录 故事导入: 幼儿园放学时,一个班级的小朋友,一个跟着一个排队出校,有一个打头,有一个收尾,当中的小朋友每一个都知道他前面和后面的一个是谁,就如同一根线把他们串联了起来。如此具有像线一样的性质的表就叫线性表 线性表(

    2024年02月07日
    浏览(57)
  • <数据结构>顺序表和链表的比较|缓存命中率

    💭前言:通过之前对顺序表和链表的实现,我们可以发现在增删查改某些操作上两者的效率前言有所差异,本篇文章将总结二者的异同。 顺序表的实现 http://t.csdn.cn/Lxyg2 单链表的实现 http://t.csdn.cn/rHgjG 双链表的实现 http://t.csdn.cn/j3amO 📚顺序表通过数组来实现的,所以在物理

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包