2301_81117808 2023-11-28 18:29 采纳率: 0%
浏览 7
已结题

数据结构与c语言的实践内容

题目为:二叉树的重构和遍历系统

要求如下

1.提交截止:2023年12月18日22:00之前;
2.报告需按照给定模板及格式书写;
3.评分标准
(1)排版、字数、图表的引用、字体大小颜色等格式正确(10%)
(2)代码风格良好(10%)
(3)数据结构设计合理、测试用例覆盖全面、实现功能完善(40%)
(4)撰写的报告逻辑清晰、内容完整、全面(30%)
(5)除基本功能外,实现了有亮点的额外功能(10%)。
(6)涉嫌抄袭,直接以0分计!
发表部分即可,完整部分私发我即采纳

  • 写回答

18条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-28 20:48
    关注
    获得0.80元问题酬金

    【相关推荐】



    • 你可以看下这个问题的回答https://ask.csdn.net/questions/714541
    • 这篇博客你也可以参考下:C语言:求以下二维数组的最大值及其位置;要求分别初始化和从键盘输入二维数组元素值,以矩阵形式输出该二维数组并求最大值和其行标、列标
    • 您还可以看一下 李飞老师的C语言开发之数据结构与算法二课程中的 树的深度遍历(递归)小节, 巩固相关知识点
    • 除此之外, 这篇博客: 【C语言进阶】三分钟帮你透彻理解实战项目中指针参数的真正用法中的         2.二维数组传参🍉: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

              我们在前面初阶的部分学习二维数组传参时就知道了,二维数组在进行传参时可以不知道有多好行,但必须知道有多少列,这样计算机才知道应该在何时进行换行。如此只要知道了什么时候进行换行,对于行数就不需要再进行强制要求了,所以在数组进行传参时,允许写成以下三种形式:

      //二维数组传参:
      //方式1:标准传参
      void test1(int arr[3][3])
      {
      	int i = 0;
      	for (i = 0; i < 3; i++)
      	{
      		int j = 0;
      		for (j = 0; j < 3; j++)
      		{
      			printf("arr[%d][%d] = %d ", i, j, arr[i][j]);
      		}
      		printf("\n");
      	}
      }
      
      //方式2:行数可以省略
      void test2(int arr[][3])
      {
      	int i = 0;
      	for (i = 0; i < 3; i++)
      	{
      		int j = 0;
      		for (j = 0; j < 3; j++)
      		{
      			printf("arr[%d][%d] = %d ", i, j, arr[i][j]);
      		}
      		printf("\n");
      	}
      }
      
      //方式3:行数可以超出原数组上限
      void test3(int arr[100][3])
      {
      	int i = 0;
      	for (i = 0; i < 3; i++)
      	{
      		int j = 0;
      		for (j = 0; j < 3; j++)
      		{
      			printf("arr[%d][%d] = %d ", i, j, arr[i][j]);
      		}
      		printf("\n");
      	}
      }
      
      int main()
      {
      	int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
      
      	//函数调用:
      	test1(arr);
      	test2(arr);
      	test3(arr);
      	return 0;
      }

              同样的,二维数组除了可以使用数组作为函数的参数以外,也可以使用指针作为函数的参数进行传参,区别于一维数组,二维数组在传参时传递的不是首元素的地址而是首行元素的地址

      void test(int(*p)[3])
      //此处的数组大小3为列数
      {
      	int i = 0;
      	for (i = 0; i < 3; i++)
      	{
      		int j = 0;
      		for (j = 0; j < 3; j++)
      		{
      			printf("%d ", (*p + i * 3)[j]);
                  //这里注意p+(i*3)是因为i为行号,跳过行时需要跳过i*3个数据元素
      		}
      		printf("\n");
      	}
      }
      
      int main()
      {
      	int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
      
      	test(arr);
      
      	return 0;
      }

              但是要格外注意,二维数组与一维数组不同,不可以使用二级指针进行传参。其原理是,二级指针的作用是用于存储一级指针的的地址,而传递过来的参数是二维数组第一行(这里可以简单理解为一个一维数组,但本质上不是)的地址,无法使用二级指针进行存储。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 创建了问题 11月28日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)