一个关于族谱的问题。

栏目:资讯发布:2023-09-28浏览:3收藏

一个关于族谱的问题。,第1张

这里的“房”是指家族中的房分,即家族中的一支。一般是按兄弟来分的,如老大叫“长房”,老二叫“二房”,老三叫“三房”……。

你们族谱上写着“三房”,说明你先祖那辈的几兄弟中,你是“老三”的后裔。

/实验14—2 设计一个程序,采用二叉树表示一个家谱关系。要求程序具有如下功能:

(1) 文件操作功能:记录输入、记录输出,清除全部文件记录和将家谱记录存盘。

(2) 家谱操作功能:用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先。/

#include<iostreamh>

#include<stdlibh>

#include<stdioh>

#include<stringh>

typedef struct Node

{

int degree;//人员所在代数

char data;//人员标志

struct Node lchild;//data的孩子

struct Node rchild;//data的兄弟

}BTNode;

#define max 100

int choose;

char X;

void CreatBTNode(BTNode b,char str);//创建记录

BTNode SearchX(BTNode b,char X);//查找记录

void InputBTNode(BTNode b,char str);//1记录输入

void OutputBTNode(BTNode b,char str);//2记录输出

void Store(BTNode b,char str);//3家谱记录存盘

void DispTree(BTNode b);//4用括号法输出家谱

void SearchXSon(BTNode b,char X);//5查找某人的儿子

void SearchXAncestor(BTNode b,char X);//6查找某人的祖先

void Distory(BTNode b,char str);//7清除全部文件记录

int main()

{BTNode b=NULL;

char str=(char)malloc(maxsizeof(char));

str[0]='\0';

cout<<"--------------------------------------------------------------------"<<endl;

cout<<"0退出"<<endl;

cout<<"1记录输入:\t"<<endl;

cout<<"2记录输出:\t"<<endl;

cout<<"3家谱记录存盘:\t"<<endl;

cout<<"4用括号法输出家谱:\t"<<endl;

cout<<"5查找某人的儿子:\t"<<endl;

cout<<"6查找某人的祖先:\t"<<endl;

cout<<"7清除全部文件记录:\n"<<endl;

cout<<"-------------------------------------------------------------------"<<endl;

cout<<"Please choose the operation you want to do "<<endl;

cout<<"choose=";

cin>>choose;

while(choose)

{switch(choose)

{

case 1:

InputBTNode(&b,str);break;

case 2:

OutputBTNode(&b,str);break;

case 3:

Store(b,str);

printf("文件已经保存!");

break;

case 4:

DispTree(b); break;

case 5:

printf("请输入需要查找儿子的结点:");

cin>>X;

SearchXSon(b,X);

break;

case 6:

printf("请输入需要查找祖先的结点:\n");

cin>>X;

BTNode p;

p=SearchX(b,X);

if(p!=NULL)

SearchXAncestor(b,X);

else

printf("该结点不存在!");

break;

case 7:

Distory(&b,str);

printf("文件记录已经清除!");

break;

default:

cout<<endl<<"Invalid input,input again";

}

cout<<endl<<"please choose again:"<<endl;

cout<<"the choose =";

cin>>choose;

}

return 0;

}

void CreatBTNode(BTNode b,char str) //创建树

{

BTNode S[max],p=NULL;

int top=-1,tag,j=0,d=0;

char ch;

b=NULL;

ch=str[j];

while(ch!='\0')

{

switch(ch)

{

case '(':

d++;

top++;

S[top]=p;

tag=1;break;

case ')':

top--;break;

case ',':

d--;

tag=2;break;

default:

p=(BTNode )malloc(sizeof(BTNode));

p->degree=d;

p->data=ch;

p->lchild=NULL;

p->rchild=NULL;

if((b)==NULL)(b)=p;

else

{

switch(tag)

{

case 1: S[top]->lchild=p;break;

case 2: S[top]->rchild=p;break;

}

}

}

ch=str[++j];

}

}

void InputBTNode(BTNode b,char str)//记录输入

{

do

{

printf("请输入需要输入的记录:\n");

gets(str);

if(str[0]=='\0')

printf("输入的记录为空,请再次输入:\n");

}while(str[0]=='\0');

CreatBTNode(b,str);

printf("记录创建成功!");

}

void OutputBTNode(BTNode b,char str)//从文件中读出记录

{

FILE fp;

if((fp=fopen("wangljtxt","r"))==NULL)

{

printf("不存在记录文件,要建立吗\n建立请输入Y,否则按其他键:");

if(getchar()=='Y')

{

fp=fopen("wangljtxt","w+");

printf("记录文件“wangljtxt”已建立\n");

}

else

exit(1);

}

else

{

if(!feof(fp))

fscanf(fp,"%s",str);

fclose(fp);

CreatBTNode(b,str);

printf("文件中记录已输出\n");

}

}

void Store(BTNode b,char str)//储存全部的结点记录

{

BTNode p;

p=b;

FILE fp;

fp=fopen("wangljtxt","w+");

if(fp==NULL)

{

printf("文件打开失败!");

return;

}

else

{

if(p!=NULL)

{

fprintf(fp,"%s",str);

fclose(fp);

}

}

}

void DispTree(BTNode b)//用括号法输出家谱记录

{

if(b!=NULL)

{printf("%c",b->data);

if(b->lchild!=NULL||b->rchild!=NULL)

{printf("(");

DispTree(b->lchild);

if(b->rchild!=NULL)

{printf(",");

DispTree(b->rchild);

}

printf(")");

}

}

else

printf("\0");

}

BTNode SearchX(BTNode b,char X)//查找结点X

{BTNode p;

if(b==NULL) return NULL;

else if(b->data==X) return b;

else

{

p=SearchX(b->lchild,X);

if(p!=NULL) return p;

else

{

return SearchX(b->rchild,X);

}

}

}

void SearchXSon(BTNode b,char X)//查找结点X的所有儿子

{

BTNode p,q;

p=SearchX(b,X); //找到节点X

if(p!=NULL)

{

p=p->lchild;

if(p==NULL) //X没有孩子

printf("节点%c没有儿子!",X);

else

{

printf("节点%c的所有儿子为:",X);

if(p!=NULL)

printf("%c ",p->data);

q=p->rchild;

while(q)

{

printf("%c ",q->data);

q=q->rchild;

}

}

}

else

printf("该结点不存在!");

}

void TraverseBT(BTNode b,int d)//遍历家谱

{

if(b!=NULL)

if(b->degree<d)

{

printf("%c ",b->data);

if(b->lchild!=NULL)

TraverseBT(b->lchild,d);

if(b->rchild!=NULL)

TraverseBT(b->rchild,d);

}

}

void SearchXAncestor(BTNode b,char X)//查找结点X的所有祖先

{

if(b==NULL)

{

printf("这是一棵空树!");

return ;

}

BTNode p=SearchX(b,X);

if(p->degree==0)

{

printf("X为根节点或其兄弟,没有祖先!");

return;

}

printf("%c结点的祖先有:",X);

TraverseBT(b,p->degree);

}

void Distory(BTNode b,char str)//清除全部的记录

{

(b)=NULL;

FILE fp;

fp=fopen("wangljtxt","w");

if(fp==NULL)

{

printf("打开文件失败!");

exit(1);

}

str="";

fclose(fp);

}

你懂的,同道中人!

赵氏出自嬴姓部落,祖先是帝舜时的伯益(或名柏翳),具体始祖是伯益的十三世孙造父。所《姓氏考略》记载:造父为周穆王的驾车大夫,曾为周穆王驾驶兵车救国有功,皇帝便把赵城(今山西洪洞县北)赐给他作为封邑,造父的子孙就以封地赵城为氏,姓赵。

[赵氏名望]

造父的六世孙奄父及其孙叔带于周宣王时救驾有功,叔带被任命为执政,赵氏势力从此大兴,后因周幽王无道,叔带离开周而到了晋国。叔带的七世孙赵衰辅佐晋文公登上霸主之位后,赵氏子孙就世代为晋国大夫。至赵襄子,率领族人与韩、魏两家联合灭掉了晋国,建立赵国。赵国于公元前222为秦所灭后,赵国末代君主代王赵嘉的后裔世居陇西天水西县(今甘肃天水县西南),在此发展为大族。除了天水,赵姓还有涿郡、南阳、金城等郡望。

赵氏家族历史悠久,自然不乏名人逸士。例如,帝王者中著名的就有提倡“胡服骑射”的赵武灵王;发动陈桥兵变,建立北宋皇朝的赵匡胤等。名臣中则有控制朝政,掌握实权的秦朝宰相赵高;策划陈桥兵变,帮助赵匡胤夺取江山的宋朝宰相赵普等。赵姓的名将则有赵国的赵奢,西汉的赵充国等。而西汉时的农学家赵过,元代著名书画家赵孟頫,清代诗人赵执信等皆为赵姓学者中的佼佼者。此外,南越王墓主人赵佗也是一位在历史上占有一定地位的赵姓名人。近代以来,赵姓名人也不断涌现,如著名作家赵树理,学者赵朴初等,都为世人所熟知。

在今天,以人口数量来计算,赵姓在当代百家姓中排名第七位。

一、赵姓的姓氏起源

(一)少皞——赵姓的血缘始祖

(二)伯益——受赐嬴,秦、赵的共同的祖先

(三)蜚廉——他的儿子开始了秦、赵的分支

(四)造父——历史上第一个姓赵的人

(五)赵姓姓氏探源的其他说法

(六)赵姓上古溯源世系表

二、赵姓的历史沿革

(一)春秋战国——入晋执政,立国称雄

(二)秦汉时期——岭南称王,功臣封侯

(三)三国至唐——将才如星,名士名云

(四)两宋时期——鼎盛辉煌,国姓第一

(五)元明至今——人才济济,遍地开花

三、赵姓的姓氏变迁

(一)本是他姓改为赵姓

(二)本是赵姓改为他姓

(三)少数民族中的赵姓

四、赵姓的分布、郡望和血型

(一)赵城寻根和天水赵氏

(二)两宋迁移和涿郡赵氏

(三)峰谷起伏和豫鲁赵氏

(四)赵姓的血型

五、赵姓家谱一瞥

(一)家谱概说

(二)赵姓家谱简介

六、赵姓重要历史名人

(一)赵武灵王胡服骑射

(二)平原君赵胜破家救国

(三)赵佗岭南称帝王

(四)一身是胆赵子龙

(五)陈桥后变赵匡胤建宋

(六)一年读书一千卷的皇帝赵光认

(七)以半部《论语》治天下的赵普

(八)书画家皇帝赵佶

(九)开一代画风的赵孟br> (十)优秀表演艺术家赵丹

(十一)著名小说家赵树理

七、赵姓寻踪溯源、祭祖认宗之胜地

八、赵姓文化纵横谈

九、赵姓历史名人一览表

一个关于族谱的问题。

这里的“房”是指家族中的房分,即家族中的一支。一般是按兄弟来分的,如老大叫“长房”,老二叫“二房”,老三叫“三房”……。 你...
点击下载
热门文章
    确认删除?
    回到顶部