C语言及程序设计进阶例程-19 链表应用

简介: 贺老师教学链接  C语言及程序设计进阶 本课讲解猴子选大王#include <stdio.h>#include <malloc.h>struct Monkey{ int num; //猴子的编号 struct Monkey *next; //下一只猴子};int main(){ int m,n,i,j,king; s

贺老师教学链接  C语言及程序设计进阶 本课讲解


猴子选大王

#include <stdio.h>
#include <malloc.h>
struct Monkey
{
    int num;  //猴子的编号
    struct Monkey *next; //下一只猴子
};


int main()
{
    int m,n,i,j,king;
    struct Monkey *head, *p1,*p2;
    scanf("%d %d", &m, &n);
    if(n==1)
    {
        king=m;
    }
    else
    {
        //建立猴子围成的圆圈
        p1 = p2 = (struct Monkey*)malloc(sizeof(struct Monkey));
        head = p1;
        head->num=1;
        for(i=1; i<m; i++)  //其余m-1只猴子
        {
            p1 = (struct Monkey*)malloc(sizeof(struct Monkey));  //p1是新增加的
            p1->num = i+1;
            p2->next = p1;
            p2 = p1;          //p2总是上一只
        }
        p2->next = head;      //最后一只再指向第一只,成了一个圆圈


        //下面要开始数了
        p1=head;
        for(i=1; i<m; i++)  //循环m-1次,淘汰m-1只猴子
        {
            //从p1开始,数n-1只就找到第n只了
            for(j=1; j<n-1; j++)  //实际先找到第n-1只,下一只将是被淘汰的
                p1=p1->next;    //围成圈的,可能再开始从第一只数,如果还未被淘汰的话


            //找到了,
            p2=p1->next;  //p2将被删除
            printf("第%d轮淘汰%d\n", i, p2->num);   //可以这样观察中间结果
            p1->next=p2->next;  //p2就这样被“架空了”
            p1=p2->next;  //下一轮数数的新起点
            free(p2);  //将不在链表中的结点放弃掉
        }
        king=p1->num;
        free(p1);
    }
    printf("猴王是%d\n", king);
    return 0;
}



目录
相关文章
|
2月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
89 4
|
21天前
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
180 6
|
25天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
46 5
|
24天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
23天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
23天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
54 1
|
25天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
35 2
|
29天前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
29天前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
1月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
87 4