数据结构(C语言描述)

Python016

数据结构(C语言描述),第1张

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define DataType int

#define MAXSIZE 1000

typedef struct node{

    DataType data

    struct node *lchild

    struct node *rchild

}BiTreeNode

DataType BT[MAXSIZE]

BiTreeNode* BuildBTree(DataType BT[], int n, int i)

{

    BiTreeNode * node

    if(i>=n || (node=(BiTreeNode*)malloc(sizeof(BiTreeNode)))==NULL) return NULL

    node->data = BT[i]

    node->lchild =  BuildBTree(BT, n, 2*i+1)

    node->rchild =  BuildBTree(BT, n, 2*i+2)

    return node

}

void PrintLevel(BiTreeNode * bt, int level, int l)

{

    if(!bt) return

    if(l < level)

        PrintLevel(bt->lchild, level,l+1)

    if(l == level)

        printf("%4d",bt->data)

    if(l < level)

        PrintLevel(bt->rchild, level,l+1)    

}

/* 先序凹入表示法输出, 一般通过前导的空格来凹入 #*/

/*pre,sur分别为前导后续字符,一般前导为空格字符,#*/

void PrintTree(BiTreeNode *bt,char pre,char sur,int depth,int level){

    if(bt==NULL) return  /*如果为空树,return;*/

    int i=0  /*先序输出根*/

    while(++i<level) printf("%c%c%c%c",pre,pre,pre,pre)   // 凹入,输出前导字符

    printf("%4d",bt->data)                // 输出当前节点

    while(i++<depth) printf("%c%c%c%c",sur,sur,sur,sur)    // 输出后续字符

    printf("\n")

    /*输出子树*/

    PrintTree(bt->lchild,pre,sur,depth,level+1)

    PrintTree(bt->rchild,pre,sur,depth,level+1)

}

void CTBT(int n)

{   // 建立初始n个节点的完全二叉树

    while(n--) BT[n] = n

}

int main()

{

    int i,n,depth

    BiTreeNode *bt

    scanf("%d",&n)

    CTBT(n)

    bt = BuildBTree(BT, n, 0)

    depth = (int)(log(n)/log(2))+1

    i=0

    while(++i<=depth)

    {

  printf("\nThe %dth Level:",i)

        PrintLevel(bt, i,1)

    }

 printf("\n")

    PrintTree(bt,' ','-',depth,1)

 return 0

}

经调试这个没问题,完成了要求的三个功能

1、c语言(数据结构)中,在函数定义的头部分&怎么使用?

如果使用的是纯C语言,在函数定义的头部,不使用&来定义形参,当需将对形参的改变带回来时用指针即*。大多数据结构教材沿用严蔚敏版教材的习惯,用类C语言,描述数据结构,借助C++中的引用即&来定义形参,这时起到作用类似于指针,但函数的写法更简洁。

2、你只要记住一点,如果需要将参数改变带回来就要用引用或指针来实现。

3*和&写的顺序是不同的,

int * &c = a//这里c是一个引用,它是指针a的引用

int &*d//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的

数据结构分两大部分:数据存储结构和基于这些存储结构的一些查找排序算法。

存储结构分线性和非线性的两种,具体讲就是:线性表、树、图等。

多看几遍就可以了,关键是投入时间,相信一定可以的。