数据结构 树的链式存储(双亲表示法)

//树的链式存储--双亲表示法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_TREE_SIZE 100
typedef struct BPTNode
{
    char data;//数据域
    int parentPosition; //双亲的数组下标
    char LRTag; //左右孩子标志域
}BPTNode;

typedef struct BPTree
{
    BPTNode nodes[100]; //因为节点之间是分散的,需要把节点存储到数组中
    int num_node;  //节点数目
    int root; //根结点的位置 //注意此域存储的是父亲节点在数组的下标
}BPTree;

void Test1(){
    BPTNode t1, t2, t3, t4, t5,t6;
    BPTree bt;
    bt.nodes[0] = t1;
    bt.nodes[1] = t2;
    bt.nodes[2] = t3;
    bt.nodes[3] = t4;
    bt.nodes[4] = t5;
    bt.nodes[5] = t6;
    bt.num_node = 6;
    bt.root = 0;

    t1.data = ‘A‘;
    t1.LRTag = ‘0‘;
    t1.parentPosition = ‘-1‘;

    t1.data = ‘B‘;
    t1.LRTag = ‘0‘;
    t1.parentPosition = ‘0‘;

    t1.data = ‘C‘;
    t1.LRTag = ‘1‘;
    t1.parentPosition = ‘0‘;

    t1.data = ‘D‘;
    t1.LRTag = ‘0‘;
    t1.parentPosition = ‘1‘;

    t1.data = ‘E‘;
    t1.LRTag = ‘1‘;
    t1.parentPosition = ‘1‘;

    t1.data = ‘F‘;
    t1.LRTag = ‘1‘;
    t1.parentPosition = ‘2‘;

}

void main(){

    system("pause");
}

时间: 2024-12-29 10:22:47

数据结构 树的链式存储(双亲表示法)的相关文章

数据结构 树的链式存储(三叉表示法)

//树的链式存储--三叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct _TreeNode{ //数据域 int data; //指针域 struct _TreeNode * leftchild;//左孩子指针 struct _TreeNode * rightchild;//右孩子指针 struct _TreeNode * parent;//双亲指针---比二叉表示法多

数据结构 树的链式存储(二叉表示法)

//树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct _TreeNode{ //数据域 int data; //指针域 struct _TreeNode * leftchild;//左孩子指针 struct _TreeNode * rightchild;//右孩子指针 }TreeNode, *TreeNodePointer; /* 以上语法定义了两个类

大话数据结构——线性表-链式存储之头插法创建链表

1 #include<iostream> 2 3 #include<time.h> 4 #include <stdlib.h> 5 6 using namespace std; 7 8 #define OK 1 9 #define TRUE 1 10 #define FALSE 0 11 #define ERROR 0 12 13 typedef int status;//返回的状态值 14 typedef int elemtype;//节点里数据的类型 15 16 /

数据结构-线性表-链式存储

由于顺序表的插入.删除操作需要移动大量的元素,影响了运行效率,由此引入了线性表的链式存储. 链式存储线性表时,不需要使用地址连续的存储单元,即它不要求逻辑上相邻的两个元素在物理位置上也相邻,它是通过“链”建立起数据元素之间的逻辑关系. 因此,对线性表的插入.删除不需要移动元素,而只需要修改指针. 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素.为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后继的指针.单链表结

数据结构-队列-顺序链式存储

定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队:删除元素称为出队或离队. 队列的操作 队列不可以读取对中间的元素. 队列的存储结构 顺序存储 链式存储 顺序存储 队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针front 和rear分别指示队头元素和队尾元素的位置. 设队头指针指向队头元素,队尾指针指向队尾 元素的下一个位置(也可以让rear指向队尾元素,front指向队头元

数据结构 - 栈的链式存储

栈的链式存储 1 栈的链式表示 栈的链式存储结构称为链栈,是运算受限的单链表.其插入和删除操作只能在表头位置上进行.因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针.图3-4是栈的链式存储表示形式. 链栈的结点类型说明如下: typedef struct Snode { ElemType data ; struct Snode *next ; } SNode, *Link_Stack ; 链栈基本操作的实现 2 链栈基本操作的实现 (1) 栈的初始化 SNode *Ini

数据结构之队列——链式存储结构(php代码实现)

<?php class QNode{     public  $data;     public  $next;     public function __construct($data){         $this->data=$data;         $this->next=null;     } } class LinkQueue{ //链队列包含头结点,实例化时,此队列为空     private $data;     private $next;     private

大话数据结构——线性表-链式存储之删除整链表

#include<iostream> #include<time.h> #include <stdlib.h> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 typedef int status;//返回的状态值 typedef int elemtype;//节点里数据的类型 //数据结构 typedef struct Node { elemtype da

数据结构之栈——链式存储结构(php代码实现)

<?php /**     1. DestroyStack(): 栈的销毁     2. ClearStack(): 将栈置为空栈     3. StackEmpty(): 判断栈是否为空     4. StackLength(): 返回栈的长度     5. GetTop(): 取得栈顶的元素     6. Push(): 插入新的栈顶元素     7. Pop(): 删除栈顶元素     8. StackTraverse(): 遍历栈元素  */ class LNode{     publi