树型结构程序怎么设计

树型结构程序怎么设计,第1张

设置至少四个字段

一个字段代表它的上一层代码(flbm),第二个字段代码最终的代码(dm),第三个字段标明本层代码(bcdm),还有一个标明是不是最终代码(bs)

flbm及dm的长度不受限制,bs用.t.或.f.来判断是不是最终的代码,如果不是,则它的下面还可以再增加代码

dm=flbm+bcdm

由此可完成概型结构的代码库

建立一个tv_1控件

long rows,i,cur_len,p

string mycode,str,myname,mylabel

long handle_current,h1

treeviewitem item

treeviewitem newitem

h1=tv_1.finditem(currenttreeitem!,0)

handle_current=tv_1.finditem(childtreeitem!,h1)

if handle_current<0 then

tv_1.getitem(h1,item)

mylabel=item.label

p=pos(mylabel,"--")

mycode=mid(mylabel,1,p - 1)

cur_len=len(mycode)

str="id like'"+mycode+"%'"

dw_1.setfilter(str)

dw_1.filter()

rows=dw_1.rowcount()

for i=1 to rows

mycode=dw_1.getitemstring(i,"no")

myname=dw_1.getitemstring(i,"name")

if len(mycode)=cur_len+2 then

newitem.label=mycode+"--"+myname

newitem.pictureindex=(cur_len+2)/2+1

newitem.selectedpictureindex=(cur_len+2)/2+2

tv_1.insertitemlast(h1,newitem)

end if

next

end if

tv_1.expanditem(h1)

return 0

再建立一个数据窗口,里面的数据库有两个字段,no和name

no字段例子:01第一层,0102第一层的第二个结点,0201第二层的第一个结点

主窗口的OPEN事件:(双击窗口任何位置,别点在控件上)

tv_1.insertitemlast(0,"根结点",1)

dw_1.settransobject(sqlca)

dw_1.retrieve()

#include <stdio.h>

#include <stdlib.h>

typedef struct {

char data

int weight

} bitree_data_t

typedef struct bitree

{

bitree_data_t data

struct bitree *lchild, *rchild

}bitree_t

typedef bitree_t * data_t

typedef struct linknode {

data_t data

struct linknode *next

}linknode_t, linkstack_t, linklist_t

//创建一个链表

//1. 在内存总开辟头结点的空间malloc

//2. 将头结点的next域置空NULL

//3. 返回创建并设置好的链表的首地址

linklist_t *create_linklist()

{

linknode_t *node = (linknode_t *)malloc(sizeof(linknode_t))

node->next = NULL

return node

}

//判断当前链表是否为空

int empty_linklist(linklist_t *ll)

{

return ll->next == NULL

}

//求链表中当前有效元素的个数

int length_linklist(linklist_t *ll)

{

int length = 0

while(ll->next != NULL)

{

ll = ll->next

length++

}

return length

}

//获得下标为index位置的元素,成功返回0,失败返回-1

//1. 判断index是否合法(部分判断)

//2. 在保证ll->next 不为空的清空下,将ll的首地址向后移动index次

//3. 判断ll->next 是否等于空,如果等于空,则返回-1,如果不为空,执行4.

//4. 当移动了index次之后,当前ll->next 的位置的节点就保存了我要获得的

//数据

//5. *data = ll->next->data

//6. 返回0

int get_linklist(linklist_t *ll, int index, data_t *data)

{

int i

if(index <0)

return -1

for(i = 0ll->next != NULL &&i <indexi++)

{

ll = ll->next

}

if(ll->next == NULL)

return -1

*data = ll->next->data

return 0

}

//使用头插法插入一个元素

//1. 创建一个节点node

//2. 将要插入的数据保存到node

//3. 执行插入 *** 作

//4. 返回0

int insert_linklist(linklist_t *ll, data_t *data)

{

linknode_t *node = (linknode_t *)malloc(sizeof(linknode_t))

node->data = *data

node->next = ll->next

ll->next = node

return 0

}

//删除链表中的一个节点:删除头结点的后一个位置(头删法)

//首先可以判断当前链表是否为空,如果为空返回-1

//如果不为空则删除头结点的下一个位置的节点

//最后返回0

int delete_linklist(linklist_t *ll)

{

linknode_t *node

if(empty_linklist(ll))

return -1

node = ll->next

ll->next = node->next

free(node)

return 0

}

//清空链表

//循环删除链表的一个节点,然后判断删除函数的返回值是否为0

//如果为0,继续删除,如果为-1则停止循环

int clear_linklist(linklist_t *ll)

{

while(delete_linklist(ll) == 0)

return 0

}

//销毁链表

//1. 调用清空 *** 作清空链表

//2. 删除头结点

//3. 返回0

int detory_linklist(linklist_t *ll)

{

clear_linklist(ll)

free(ll)

return 0

}

void preorder(bitree_t *root)

{

if(root == NULL)

return

printf("[%c,%d]", root->data.data, root->data.weight)

preorder(root->lchild)

preorder(root->rchild)

return

}

int insert_order_linklist(linklist_t *ll, data_t *data)

{

linknode_t *node = (linknode_t *)malloc(sizeof(linknode_t))

node->data = *data

while(ll->next != NULL &&ll->next->data->data.weight <node->data->data.weight)

{

ll = ll->next

}

node->next = ll->next

ll->next = node

return 0

}

bitree_t *huffman_bitree(linklist_t *ll)

{

bitree_t *node1, *node2, *root

while(ll->next != NULL &&ll->next->next != NULL)

{

get_linklist(ll, 0, &node1)

delete_linklist(ll)

get_linklist(ll, 0, &node2)

delete_linklist(ll)

root = (bitree_t *)malloc(sizeof(bitree_t))

root->data.data = '#'

root->data.weight = node1->data.weight + node2->data.weight

root->lchild = node1

root->rchild = node2

insert_order_linklist(ll, &root)

}

get_linklist(ll, 0, &root)

delete_linklist(ll)

return root

}

int main(void)

{

bitree_data_t data

bitree_t *leaf

linklist_t *ll

ll = create_linklist()

while(scanf("[%c,%d]", &data.data, &data.weight) == 2)

{

getchar()

leaf = (bitree_t *)malloc(sizeof(bitree_t))

leaf->lchild = leaf->rchild = NULL

leaf->data = data

insert_order_linklist(ll, &leaf)

}

leaf = huffman_bitree(ll)

preorder(leaf)

putchar(10)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11414671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存