数据结构考试测试编程题

简介: 数据结构考试测试编程题

左叶子之和

左叶子之和

思路:我们要遍历一遍二叉树,找到左右子树的左节点之和加起来

int sumOfLeftLeaves(struct TreeNode* root ) 
{
    if(root == NULL)
        return 0;
    if(root->left == NULL && root->right == NULL)
        return 0;
    //判断该节点是否有左节点
    if(root->left!=NULL && root->left->right == NULL && root->left->left==NULL)
        return root->left->val + sumOfLeftLeaves(root->right);
    return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}

思路解释图:

先判断根节点是否为NULL.判断是否没有左右孩子,如果有判断左孩子是否是叶子节点,是的话就存起来这个值,加上右子树的左叶子节点 的值

环形链表的约瑟夫问题

环形链表的约瑟夫问题


思路:构造一个环形单向循环链表,每走n次,就删除对应的节点,然后直到剩下一个节点

链接:https://www.nowcoder.com/questionTerminal/c3b34059faf546d3a7ee28f2b0154286?toCommentId=18647662
来源:牛客网

#include <stdio.h>
#include<stdlib.h>
typedef int SDataType;
typedef struct StackNode {
    SDataType val;
    struct StackNode* next;
} StackNode;
typedef struct Stack {
    StackNode* head;
    int size;
} Stack;
//创建节点
StackNode* CreateNode(SDataType elemest) {
    //创建
    StackNode* new = (StackNode*)malloc(sizeof(StackNode));
    if (new == NULL) {
        perror("CreateNode");
        return NULL;
    }
    new->next = NULL;
    new->val = elemest;
    return  new;
}
//初始化
void StackInit(Stack* root) {
    root->head = NULL;
    root->size = 0;
}
//插入
void StackPush(StackNode** head, SDataType elemest) {
    //创建
    StackNode* newnode = CreateNode(elemest);
    if (*head == NULL) {
        *head = newnode;
        newnode->next = *head;
    } else {
        StackNode* tail = *head;
        while (tail->next != *head) {
            tail = tail->next;
        }
        tail->next = newnode;
        newnode->next = *head;
    }
}
//删除
void StackPop(StackNode** head, StackNode* node) {
    if (head == NULL)
        return;
    if (*head == node) {
        StackNode* tail = (*head)->next;
        while (tail->next != *head) {
            tail = tail->next;
        }
        *head = (*head)->next;
        tail->next = *head;
        free(node);
        return;
    }
    StackNode* tail = (*head)->next;
    while (tail != *head) {
        if (tail->next == node)
            break;
        tail = tail->next;
    }
    tail->next = node->next;
    free(node);

}
//释放
void StackDestoy(StackNode* head) {
    StackNode* tail = head->next;
    while (tail != head) {
        StackNode* p = tail->next;
        free(tail);
        tail = p;
    }
}
int main() {
    //
    Stack* root = (Stack*)malloc(sizeof(Stack));
    //初始化
    StackInit(root);
    int n = 0;
    scanf("%d", &n);
    int i = 1;
    for (i = 1; i <= n; i++) {
        //插入
        StackPush(&(root->head), i);
        root->size++;

    }
    //
    int m = 0;
    scanf("%d", &m);
    int count = 1;
    StackNode* tail = root->head;
    while (root->size != 1) {
        if (count == m) {
            root->size--;
            count = 0;
            //删除
            StackNode* p = tail->next;
            StackPop(&(root->head), tail);
            tail = p;
            count++;
        } else {
            count++;
            tail = tail->next;
        }
    }
    printf("%d", root->head->val);
    StackDestoy(root->head);
    free(root);
    return 0;
}
相关文章
|
27天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
134 59
|
13天前
|
人工智能 自然语言处理 前端开发
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
CodeArena 是一个在线平台,用于测试和比较不同大型语言模型(LLM)的编程能力。通过实时显示多个 LLM 的代码生成过程和结果,帮助开发者选择适合的 LLM,并推动 LLM 技术的发展。
44 7
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
58 1
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
34 1
|
2月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
41 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
2月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
54 1
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
57 2
|
2月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
55 0
|
2月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
35 0
|
3月前
|
存储 索引 Python
Python编程的常用数据结构—列表
Python编程的常用数据结构—列表
28 0

热门文章

最新文章