请好心人帮忙用C数据结构做一个程序实现二叉家族树的建立与输出

请好心人帮忙用C数据结构做一个程序实现二叉家族树的建立与输出,第1张

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define MaxWidth 40

#define MaxSize 30

typedef struct treenode

{

char name[10]

struct treenode *left,*right

} *BTree

BTree findfather(BTree p,char xm[])

{

BTree bt

if(p==NULL) return(NULL)

else

{

if(strcmp(p->name,xm)==0)

return(p)

else

{

bt=findfather(p->left,xm)

if(bt!=NULL) return(bt)

else return(findfather(p->right,xm))

}

}

}

BTree creatree()

{

int n,m,i,contin=1,first=1

char xm[10]

BTree btree,s,t,p

printf("\n建立一个家谱二叉树(以空格结尾):\n")

while(contin)

{

if(first==1)

{

btree=(BTree)malloc(sizeof(struct treenode))

printf("\t姓名:")

gets(btree->name)

btree->right=NULL

s=(BTree)malloc(sizeof(struct treenode))

printf("\t妻子:")

gets(s->name)

s->left=s->right=NULL

btree->left=s

first=0

}

else

{

printf("\t父亲:")

gets(xm)

if(strcmp(xm," ")==0)

contin=0

else

{

p=findfather(btree,xm)

if(p!=NULL)

{

p=p->left

if(p==NULL)/*没有妻子*/

printf("\t没有儿子(因为没有妻子)\n")

else

{

while(p->right!=NULL) p=p->right

s=(BTree)malloc(sizeof(struct treenode))

s->right=NULL

p->right=s

printf("\t儿子:")

gets(s->name)

printf("\t儿妻:")

gets(xm)

if(strcmp(xm,"")!=0)

{

t=(BTree)malloc(sizeof(struct treenode))

strcpy(t->name,xm)

t->left=t->right=NULL

s->left=t

}

else s->left=NULL

}

}

else printf("不存在这样的父结点!\n")

}

}

}

return(btree)

}

void disptree(BTree BT)

{

BTree stack[MaxSize],p

int level[MaxSize][2],top,n,i,width=4

if(BT!=NULL)

{

printf("\n家谱凹入表示法:\n")

top=1

stack[top]=BT /*根结点入栈*/

level[top][0]=width

while (top>0)

{

p=stack[top] /*退栈并凹入显示该结点值*/

n=level[top][0]

for (i=1i<=ni++) /*其中n为显示场宽,字符以右对齐显示*/

printf(" ")

printf("%6s",p->name)

for(i=n+1i<=MaxWidth-6i+=2)

printf("━")

printf("\n")

top--

if(p->right!=NULL)

{ /*将右子树根结点入栈*/

top++

stack[top]=p->right

level[top][0]=n+width /*显示场宽增width*/

level[top][1]=2

}

if (p->left!=NULL)

{ /*将左子树根结点入栈*/

top++

stack[top]=p->left

level[top][0]=n+width /*显示场宽增width*/

level[top][1]=1

}

}

}

}

void findson(BTree bt)

{

char xm[10]

BTree p

printf("\n查找指定父亲的所有儿子\n")

printf("父亲:")

gets(xm)

p=findfather(bt,xm)

if(p==NULL)

printf("不存在%s的父亲!\n",xm)

else

{

p=p->left

p=p->right

if(p==NULL)

printf("%s没有儿子!\n",xm)

else

{

printf("%s有以下儿子!\n\t")

while(p!=NULL)

{

printf("%8s ",p->name)

p=p->right

}

}

}

}

main()

{

BTree bt

bt=creatree()

disptree(bt)

findson(bt)

}

pstree

pstree显示正在运行的进程的树形结构,树以PID为根;如果省略了pid则以init为根。如果指定了用户名,则显示根植于该用户拥有的进程的所有进程树。如果pstree被调用为pstree.x11,那么它将提示行尾的用户按RETURE,并且在这种情况发生之前不会返回。这对于在x终端中运行pstree非常有用。

pstree通过将相同的分支放在方括号中并以重复计数作为前缀,在视觉上合并它们。例如:

init-+-getty

|-getty

|-getty

‘-getty

变成下面的样子

init---4*[getty]

进程的子线程在父进程下找到,并以大括号显示进程名,例如:

icecast2---13*[{icecast2}]

此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法

pstree [选项]

2、选项列表

选项

说明

-a

显示每个进程的完整指令,包括路径、参数

-A

使用ascii码显示树形

-c

关闭精简表示法

-G

使用VT 100线条绘制字符

-h

高亮显示正在执行的程序

-H

类似“-h”,但是突出显示指定的进程。与-h不同,如果高亮显示不可用,pstree在使用-H时会失败。

-l

长格式显示

-n

以进程号排序,默认以名字排序

-p

显示pid

-u

显示用户

-U

以utf-8显示字符

-V

显示命令版本信息

-Z

每个SELinux的上下文

3、实例

1)显示完成的树形结构

[root@localhost ~]# pstree -a

init

├─NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid

│ ├─dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid ...

│ └─{NetworkManager}

├─VBoxClient --clipboard

│ └─VBoxClient --clipboard

2)显示进程号

[root@localhost ~]# pstree -p

init(1)─┬─NetworkManager(6362)─┬─dhclient(6377)

│ └─{NetworkManager}(6379)

├─VBoxClient(7869)───VBoxClient(7870)───{VBoxClient}(7872)

├─VBoxClient(7882)───VBoxClient(7883)

├─VBoxClient(7890)───VBoxClient(7891)───{VBoxClient}(7894)

├─VBoxClient(7898)───VBoxClient(7899)─┬─{VBoxClient}(7901)

│└─{VBoxClient}(7903)

├─VBoxClient(7306)───VBoxClient(7308)

├─VBoxClient(7312)───VBoxClient(7314)───{VBoxClient}(7317)

├─VBoxClient(7318)───VBoxClient(7320)─┬─{VBoxClient}(7323)

│└─{VBoxClient}(7325)

你提到的是指在家族网建立家族树吗?

家族网创建家族树很简单,直接进入家族网的登录页面,注册帐号之后就会出现属于你的家族树,用户根据自己的家庭构成来完善家族树上的资料,

家族树上的成员可以自己添加和更改,同时只要是同一棵家族树上的成员都可以对树进行共同的管理!

用户在家族网建立自己的家族树后,就相当于拥有了一个自己的在线家庭!


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存