数据结构实验报告,数组(C语言)

简介: 数据结构实验报告,数组(C语言)

数据结构实验报告,数组(C语言)


作者:命运之光
专栏:数据结构
实验五 数组
实验环境:Visual C++或Dev C++
实验目的:
1、掌握C语言定义数组的方法;
2、掌握一维数组和二维数组的运算方法。
实验内容(二选一):
题一:设二维数组a[1..m,1…n]含有m*n个整数,写一个算法判断a中所有元素是否互不相同,输出相关信息(yes/no)
1.任务分析
判断二维数组中的元素是否互不相同,需要逐个比较,为了提高算法效率,应当避免重复的比较,确保每个元素同其他元素比较一次且只有一次。
2.程序构思
1) 依次遍历数组中每个元素,对于第i行的每个元素,先同本行后面的元素逐个比较,然后再同第i+1行及其后各行元素逐个比较;
2) 在比较过程中,只要找到一对相等的元素,就可断定不是互不相同,不必继续比较,返回0,否则继续比较,最后返回1,表明数组所有元素互不相同。
题二: 设任意n个整数存放于数组A[1..n]中,编写算法,将所有正数排在所有负数前面。
1.任务分析
本题属于数列的划分问题,将数组调整为左右两部分,每部分元素并不要求有序。
2.程序构思
1)可在数组首尾各设一个指针low和high,low从左至右搜索,遇到负数停止;
2)High从右至左搜索,遇到整数停止;
3)然后将low和high所指向的数据进行交换;
4)重复以上过程,直到low和high相等为止

在这里插入图片描述


实验五 数组


一、需求分析

选题一:设二维数组a[1..m,1...n]含有m*n个整数,写一个算法判断a中所有元素是否互不相同,输出相关信息(yes/no)。由于程序功能单一故直接将算法写入主函数中。


二、概要设计

程序功能单一并未调用函数,直接写在了主函数里。
1.用#define max 100宏定义定义了max大小;
2.用amax定义了二维数组大小;
3.定义逐一遍历算法;
思路:挨个遍历,如果出现用cout来记录出现次数,我设计cout若是大于1则说明出现不止一次输出NO否则就是YES。


三、详细设计

1.定义全局变量

#define max 100
int a[max][max];
int m, n;
int i, j;
int cout = 0;

2.主程序
在主程序中直接通过二重循环的暴力算法来直接查找二维数组中是否存在重复数。


四、调试分析

简单分析:两个for循环进行二维数组挨个遍历搜索出现两次的值用cout来记录出现次数,步骤简单,主要就是二维数组的输入,并查找。
总结经验:一维数组我们用一个for循环就可以实现,二维数组相比于一维数组多了一次for循环的调用,遍历查找时也同样用两个for循环挨个遍历即可。
体会:这个二维数组的调用遍历查找对算法的要求相比与一维数组有了许多提高,再设计算法时要注意时间复杂度的问题,由于实验并未给出数据故我就直接用暴力遍历解决该问题。


五、测试结果

样例1

输入
2 2
1 2 3 4
输出
YES
在这里插入图片描述

样例2

输入
3 3
1 1 2 2 3 3 4 4 5
输出
NO
在这里插入图片描述


附录:源程序代码(带注释)

#include<stdio.h>
#define max 100
int a[max][max];
int m, n;
int i, j;
int cout = 0;
int main()
{
    printf("输入m,n的值定义二维数组大小:");
    scanf_s("%d %d", &m, &n);
    printf("输入数组m*n:");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf_s("%d", &a[i][j]);
        }
    }
    int p, q;
    p = m - 1;
    q = n - 1;
    while (p >= 0 && q >= 0)
    {
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                if (a[p][q] == a[i][j])
                {
                    cout++;
                    if (cout > 1)
                    {
                        printf("NO\n");
                        return 0;
                    }
                }
            }
        }
        cout = 0;
        if (q >= 0)
        {
            if (q != 0)
            {
                q--;
            }
            else
            {
                p--;
            }
        }
    }
    printf("YES\n");
    return 0;
}
适用于:
大一数据结构实验课实验报告——数组的练习(C语言版)

在这里插入图片描述

相关文章
|
21天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
104 9
|
7天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
31 4
|
20天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
60 16
|
20天前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
71 8
|
23天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
50 4
|
1月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
33 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
24天前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
56 3
|
1月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
37 6
|
1月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
1月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。