鱼C论坛

 找回密码
 立即注册
查看: 2576|回复: 1

关于struct开头的函数怎么设计

[复制链接]
发表于 2023-1-10 14:45:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct vnode {
  4.     int value;
  5.     struct vnode *left, *right;
  6. };

  7. void printArray(int *array, int size);
  8. void printTree(int indent, struct vnode *ptr);
  9. void swap(int *array, int i, int j);
  10. void heapUp(int *array, int i);
  11. struct vnode *transArrayTree(int *array, int i, int size);

  12. int main(void){
  13.         int data[] = {8, 98, 87, 36, 35, 54, 11, 33, 6, 79}, size = 10;
  14.         int *array, i;
  15.         struct vnode *root;
  16.         array = (int *) malloc(sizeof(int)*size);
  17.         for(i = 0; i < size; i++){
  18.                 array[i] = data[i];
  19.                 heapUp(array, i);
  20.         }
  21.         printArray(array, size);
  22.         root = transArrayTree(array, 0, size);
  23.         printTree(0, root);
  24.         return 0;
  25. }
  26. void printArray(int *array, int size){
  27.         int i;
  28.         for (i = 0; i < size; i++)
  29.                 printf("%2d%c", array[i], i == size-1 ? '\n': ' ');
  30. }
  31. void swap(int *array, int i, int j){
  32.         int tmp = array[i];
  33.         array[i] = array[j];
  34.         array[j] = tmp;
  35. }
  36. void heapUp(int *array, int i){
  37.         if(i != 0)
  38.         {
  39.     int j = (i-1)/2;
  40.     if (array[i] < array[j])
  41.     {
  42.       swap(array,i,j);
  43.       heapUp(array,j);
  44.     }
  45.         }
  46. }
  47. void printTree(int indent, struct vnode *ptr){
  48.         int i;
  49.         if (ptr == NULL) {
  50.                 for (i = 0; i < indent; i++) printf(" ");
  51.                 printf("NULL\n");
  52.         }
  53.         else {
  54.                 printTree(indent + 7, ptr->left);
  55.                 for (i = 0; i < indent; i++) printf(" ");
  56.                 printf("value = %2d\n", ptr->value);
  57.                 printTree(indent + 7, ptr->right);
  58.         }
  59. }
  60. struct vnode *transArrayTree(int *array, int i, int size){
  61.         设计函数
  62. }
复制代码

struct vnode *transArrayTree(int *array, int i, int size)是需要设计的函数,struct开头的是结构体,但是这里是一个指针函数我不太明白什么意思,这道题是关于2叉树的问题,第一个数是array【0】然后分道下面左边和右边分别是array【1】array【2】然后array1分下去左边是array3右边是array4以此类推,公式为左边array[2*i+1]和右边array[2*i+2].  i是array的数比如array[0]是6这里的i就是0
这张图是运行之后的正确结果 截屏2023-01-10 15.41.40.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-10 15:06:13 | 显示全部楼层
  1. struct vnode *transArrayTree(int *array, int i, int size){
  2.         if (i >= size)
  3.         {
  4.                 return NULL;
  5.         }
  6.         else
  7.         {
  8.                 struct vnode *x;
  9.                 x = (struct vnode*)malloc(sizeof(struct vnode));
  10.                 x->value = array[i];
  11.                 x->left = transArrayTree(array,2*i+1,size);
  12.                 x->right = transArrayTree(array,2*i+2,size);
  13.         }
  14.         return x;
  15. }
复制代码

这是我自己写的,但是运行之后只能显示6  8 11 33 36 87 54 98 35 79
不知道怎么写着东西- -
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 19:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表