- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构树的实验
实验题目:树的基本操作(孩子兄弟法建立树并实现前序遍历操作)数据类型1.二叉链表的类型定义typedefstructCSNode{ElemTypedata ;structCSNode *firstchild, *nextsibling;}CSNode,*CSTree;typedefCSTreeQElemType;2.结点的类型定义typedefstructQNode{QElemType data;structQNode *next;}QNode,*QueuePtr; 3.两个指针域的类型定义typedefstruct{QueuePtr front;QueuePtr rear;}LinkQueue;算法设计1.层次遍历建立一棵树(孩子兄弟二叉链表)CSTreeCreateTree(){CSTreeT,p,r;intfa,ch;LinkQueue Q;int n;if(n==0) T=NULL;else {InitQueue(Q); T=(CSTree)malloc(sizeof(CSNode)); T-firstchild=T-nextsibling=NULL;EnQueue (Q,T);for(;n1;n--){CSTree s=(CSTree)malloc(sizeof(CSNode));s-data=ch;s-firstchild=s-nextsibling=NULL; p=GetHead(Q);while(p-data!=fa){DeQueue (Q);p=GetHead(Q);}if(!p-firstchild){p-firstchild=s; r=s;}else{r-nextsibling=s; r=s;}EnQueue (Q,s);}}DestroyQueue(Q);return T;}2.树的先序遍历即孩子兄弟链表线序遍历voidPreOrderTraverse(CSTree T){if(T){printf(%d ,T-data);PreOrderTraverse(T-firstchild);PreOrderTraverse(T-nextsibling);}}程序源代码#includestdio.h#includestring.h#includemalloc.h#includestdlib.h typedefint Status;typedefintElemType;typedefstructCSNode{ElemTypedata ;structCSNode *firstchild, *nextsibling;}CSNode,*CSTree;typedefCSTreeQElemType;typedefstructQNode{QElemType data;structQNode *next;}QNode,*QueuePtr; typedefstruct{QueuePtr front;QueuePtr rear;}LinkQueue;Status InitQueue(LinkQueue *Q){Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode));//指向头结点if(!Q-front) exit(0);Q-front-next=NULL;return 1;}Status EnQueue (LinkQueue *Q,QElemType e){QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));p-data=e;p-next=NULL; Q-rear-next=p; Q-rear=p;return 1;}Status DeQueue (LinkQueue *Q){ QueuePtr p;if(Q-front==Q-rear) return 0; p=Q-front-next; Q-front-next=p-next;if(Q-rear==p) Q-rear=Q-front;free(p);return 1;}QElemTypeGetHead(LinkQueue *Q){if(Q-front==Q-rear) return 0;return Q-front-next-data;}Status DestroyQueue(LinkQueue *Q){while(Q-front){Q-rear=Q-front-next;free(Q-front); Q-front=Q-rear;}return 1;}//层次遍历建立一棵树(孩子兄弟二叉链表)CSTreeCreateTree(){CSTree
文档评论(0)