#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)
}
pstreepstree显示正在运行的进程的树形结构,树以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)
你提到的是指在家族网建立家族树吗?家族网创建家族树很简单,直接进入家族网的登录页面,注册帐号之后就会出现属于你的家族树,用户根据自己的家庭构成来完善家族树上的资料,
家族树上的成员可以自己添加和更改,同时只要是同一棵家族树上的成员都可以对树进行共同的管理!
用户在家族网建立自己的家族树后,就相当于拥有了一个自己的在线家庭!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)