C语言链表实现足球比赛积分排名系统

温以宁
温以宁
发布时间:2026-10-15| 6人浏览过
原创

本文介绍如何使用C语言的单向链表(Linked List)来实现一个简单的足球比赛积分统计与管理系统。该系统允许用户输入球队名称、胜平负场次及得失球数,自动计算积分和净胜球,并支持对球队列表进行增删改查操作。核心亮点在于利用指针移动实现节点的重新排列,从而完成按积分优先、净胜球次之、进球数最后的综合排名算法。

系统功能与结构概述

该系统主要包含以下核心功能模块:

  • 数据录入:批量初始化多支球队的基础数据。
  • 节点管理:动态增加新球队、按名称修改或彻底删除现有球队记录。
  • 智能排序:根据“积分 → 净胜球 → 总进球数”的规则对链表进行冒泡排序。
  • 界面交互:通过控制台菜单引导用户操作,并输出格式化报表。

核心数据结构定义

首先定义球队信息结构体 football,使用数组 num[4] 分别记录需赛场次、赢、平、负场数,并结合指针 next 构建单向链表。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>

#define LEN sizeof(match)

typedef struct football {
    char name[20];     // 球队名
    int num[4];        // num[0]场数, num[1]赢, num[2]平, num[3]负
    int goal;          // 进球数
    int lose;          // 失球数
    int integral;      // 积分 (胜*2 + 平)
    int pure;          // 净胜球 (进球 - 失球)
    struct football *next;
} match;

基本功能实现方法

第1步:初始化球队数据

目的为创建链表头部并批量填入初始数据。系统提示输入球队总数后,循环分配内存并录入得分详情。

match *creat() {
    system("cls"); 
    system("color 74");
    int t, n = 0;
    match *head, *p1;
    p1 = (match *)malloc(LEN);
    head = NULL;
    
    printf("Enter the total number of the football teams:\n");
    scanf("%d", &t);
    
    while(n != t) {
        n++;
        printf("the name of team %d :\n", n); 
        scanf("%s", p1->name);
        
        printf("team %d win round(s):\n", n); 
        scanf("%d", &p1->num[1]);
        
        printf("team %d draw round(s):\n", n); 
        scanf("%d", &p1->num[2]);
        
        printf("team %d goal:\n", n);
        scanf("%d", &p1->goal);
        printf("team %d lose:\n", n);
        scanf("%d", &p1->lose);
        
        // 自动计算积分与净胜球
        p1->integral = p1->num[1]*2 + p1->num[2];
        p1->pure = p1->goal - p1->lose;
        
        if(n == 1) {
            head = p1;
        } else {
            p2->next = p1;
            p2 = p1;
        }
        p1 = (match *)malloc(LEN);
    }
    p2->next = NULL;
    return head;
}

第2步:执行动态增删改查

增加球队 (Add):在已有链表尾部追加新节点。需注意将新增链表的头节点接在原链表末尾(p2->next = newhead)。 修改与删除 (Amend, Del):两者均需遍历链表寻找目标队名。修改时直接覆盖对应字段;删除时需处理前驱节点指向(即 pre->next = p->next),并使用 free() 释放内存以防止泄漏。

第3步:实现综合排名算法

这是系统的核心逻辑。采用链表元素交换法(冒泡排序的变种),直接在内存中交换结构体内容而非仅交换指针,以保证顺序稳定。比较规则优先级如下:

  1. 积分从高到低;
  2. 若积分相同,按净胜球(pure)从高到低;
  3. 若净胜球也相同,按总进球数(goal)从高到低。
// print 函数中的排序核心片段
for(p=head;p!=NULL;p=p->next){
    for(q=p->next;q!=NULL;q=q->next) {
        // 优先比较积分
        if(p->integral < q->integral) {
            swap_data_and_pointer(p, q);
        } else if(p->integral == q->integral) {
            // 其次比较净胜球
            if(p->pure < q->pure) {
                swap_data_and_pointer(p, q);
            } else if(p->pure == q->pure) {
                // 最后比较进球数
                if(p->goal < q->goal) {
                    swap_data_and_pointer(p, q);
                }
            }
        }
    }
}

编译与运行说明

该程序依赖 Windows API(如 GetStdHandle),因此最适合在 Windows 环境下使用 MinGW 或 Visual Studio 进行编译。由于使用了 system()

总结

本实例展示了C语言在处理复杂业务逻辑时的基础能力,特别是链表操作与多重条件排序的结合。以上内容即为C语言实现足球比赛积分统计与排序系统的详细内容,更多关于C语言实战项目的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。