没有合适的资源?快使用搜索试试~ 我知道了~
数据结构C语言版二叉树的三叉链表存储表示.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 23 浏览量
2022-07-13
09:51:02
上传
评论
收藏 40KB DOC 举报
温馨提示
二叉树的三叉链表存储表示 二叉树是一种基本的数据结构,它在计算机科学中广泛应用。二叉树的三叉链表存储表示是指用链表来存储二叉树的结点,其中每个结点包括数据域、双亲指针、左孩子指针和右孩子指针。这种存储表示方法可以有效地减少存储空间和提高查询效率。 在本文中,我们将使用C语言来实现二叉树的三叉链表存储表示。我们需要定义二叉树结点的结构体BiTPNode,其中包括数据域、双亲指针、左孩子指针和右孩子指针。然后,我们可以使用链表来存储这些结点,从而实现二叉树的三叉链表存储表示。 在实现中,我们需要定义一些函数来操作二叉树,例如构造空二叉树、销毁二叉树、按先序次序输入二叉树中结点的值等。这些函数将使用链表来存储和操作二叉树的结点。 在这里,我们还需要使用队列来辅助操作二叉树。队列是一种先进先出的数据结构,可以用来存储二叉树的结点。我们可以使用链表来实现队列,并定义一些函数来操作队列,例如构造空队列、判断队列是否为空、插入元素、删除队头元素等。 在实现中,我们还需要注意内存管理问题。我们需要使用malloc函数来动态分配内存,并使用free函数来释放内存。这样可以防止内存泄露和溢出。 二叉树的三叉链表存储表示是指用链表来存储二叉树的结点,可以有效地减少存储空间和提高查询效率。我们可以使用C语言来实现这种存储表示方法,并使用队列来辅助操作二叉树。
资源推荐
资源详情
资源评论
.
1 / 13
数据结构 C 语言版 二叉树的三叉链表存储表示.txt 大悲无泪,大悟无言,大笑无声。我们
手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先
去银行。/*
数据结构 C 语言版 二叉树的三叉链表存储表示
编译环境:Dev-C++ 4.9.9.2
日期:2011 年 2 月 13 日
*/
#include <stdio.h>
#include <malloc.h>
typedef char TElemType;
// 二叉树的三叉链表存储表示
typedef struct BiTPNode
{
TElemType data;
struct BiTPNode *parent,*lchild,*rchild; // 双亲、左右孩子指针
}BiTPNode,*BiPTree;
typedef BiPTree QElemType; // 设队列元素为二叉树的指针类型
typedef struct QNode
{
QElemType data; //数据域
struct QNode *next; //指针域
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front,//队头指针,指针域指向队头元素
rear; //队尾指针,指向队尾元素
}LinkQueue;
TElemType Nil=' '; // 字符型以空格符为空
// 构造空二叉树 T
int InitBiTree(BiPTree *T)
{
*T=NULL;
return 1;
}
// 销毁二叉树 T
.
2 / 13
void DestroyBiTree(BiPTree *T)
{
if(*T) // 非空树
{
if((*T)->lchild) // 有左孩子
DestroyBiTree(&(*T)->lchild); // 销毁左孩子子树
if((*T)->rchild) // 有右孩子
DestroyBiTree(&(*T)->rchild); // 销毁右孩子子树
free(*T); // 释放根结点
*T=NULL; // 空指针赋 0
}
}
#define ClearBiTree DestroyBiTree
// 按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中定义),
// 构造仅缺双亲指针的三叉链表表示的二叉树 T。变量 Nil 表示空(子)树
void Create(BiPTree *T) // CreateBiTree()调用
{
TElemType ch;
scanf("%c",&ch);
if(ch==Nil) // 空
*T=NULL;
else
{
*T=(BiPTree)malloc(sizeof(BiTPNode));
if(!*T)
exit(0);
(*T)->data=ch; // 生成根结点
Create(&(*T)->lchild); // 构造左子树
Create(&(*T)->rchild); // 构造右子树
}
}
// 构造一个空队列 Q
int InitQueue(LinkQueue *Q)
{
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode)); //动态分配一个空间
if(!(*Q).front)
exit(0);
(*Q).front->next=NULL; //队头指针指向空,无数据域,这样构成了一个空队列
return 1;
.
3 / 13
}
// 若 Q 为空队列,则返回 1,否则返回 0
int QueueEmpty(LinkQueue Q)
{
if(Q.front==Q.rear)
return 1;
else
return 0;
}
// 插入元素 e 为 Q 的新的队尾元素
int EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) // 存储分配失败
exit(0);
//生成一个以为 e 为数据域的队列元素
p->data=e;
p->next=NULL;
//将该新队列元素接在队尾的后面
(*Q).rear->next=p;
(*Q).rear=p;
return 1;
}
// 若队列不空,删除 Q 的队头元素,用 e 返回其值,并返回 1,否则返回 0
int DeQueue(LinkQueue *Q,QElemType *e)
{
QueuePtr p;
if((*Q).front==(*Q).rear)
return 0;
p=(*Q).front->next; //队头元素
*e=p->data;
(*Q).front->next=p->next;
if((*Q).rear==p)
(*Q).rear=(*Q).front;
free(p);
return 1;
}
// 按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中定义),
// 构造三叉链表表示的二叉树 T
int CreateBiTree(BiPTree *T)
剩余12页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3808
- 资源: 59万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G模组升级刷模块救砖以及5G模组资料路由器固件
- C183579-123578-c1235789.jpg
- Qt5.14 绘画板 Qt Creator C++项目
- python实现Excel表格合并
- Java实现读取Excel批量发送邮件.zip
- 【java毕业设计】商城后台管理系统源码(springboot+vue+mysql+说明文档).zip
- 【java毕业设计】开发停车位管理系统(调用百度地图API)源码(springboot+vue+mysql+说明文档).zip
- 星耀软件库(升级版).apk.1
- 基于Django后端和Vue前端的多语言购物车项目设计源码
- 基于Python与Vue的浮光在线教育平台源码设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功