1、 i=1;j=h; while(ij) while(i=x)j-;=x)i+; if(ij) t=aj;aj=ai;ai=t; if(ainext; j=1;while( p!=h & j j+;s=(LNode *)malloc(sizeof(Lnode);s-data=y;q-next=s;next=q; 4. 二叉排序树的类型定义如下:typedef struct BSTNode 二叉排序树的结点结构int data; 数据域struct BSTNode *lchild, *rchild; 左、右孩子指针BSTNode,*BSTree;设计递归算法,统计一棵二叉排序树T中值小于a的结点个
2、数。int f34(BSTree root) int count; BSTNode *p; p=root; if ( p & p-data return count;5. 设二叉树T采用二叉链表结构存储,试设计算法求出二叉树中离根最近的第一个叶子结点。(注:结点按从上往下,自左至右次序编号)BTNode * Firstleaf(BTNode *bt) InitQueue(Q); /初始化队列Q if(bt) EnQueue(Q,bt); while(!EmptyQueue(Q) DeQueue(Q,p); if(!p-lchild & !rchild) return p; if(p-lchil
3、d) EnQueue(Q,p-rchild) EnQueue(Q,p- 6. 已知一棵具有n个结点的完全二叉树被顺序存储在一维数组中,结点为字符类型,编写算法打印出编号为k的结点的双亲和孩子结点。 int algo2(char bt,int n,int k) if (kn) return 0;if( k=1) printf(“ %c is a rootn”, bt1);else printf(“ %cs parent is %cn”, btk, btk/2); if(2*k=n) printf(“ %cs lchild is %cn”, btk, bt2*k); else printf(“ %
4、c is not lchildn”, btk); if(2*k+1=n) printf(“ %cs rchild is %cn”, btk, bt2*k+1);else printf(“ %c is not rchildn”, btk);return 1;7. 编写算法,将非空单链表hb插入到单链表ha的第i(0i表长)个结点前。int algo1(LNode *ha, LNode *hb,int i) for(p=hb;next); for(j=1,q=ha;j p-next=q- q-next=hb-next ; free(hb);8. 设二叉树T已按完全二叉树的形式存储在顺序表T中,试设
5、计算法根据顺序表T建立该二叉树的二叉链表结构。顺序表T定义如下:struct tree int no; /* 结点按完全二叉树的编号*/ ElEMTP data; /* 数据域 */ TN; /* N为二叉树T的结点数*/ BTNode *creat_tree(struct tree TN) BTNode *pMAX; t=NULL; for(i=0;idata=Ti.data; lchild=s-rchild=NULL; m=Ti.no; pm=s; if(m=1) t=s; else j=m/2; if(m%2=0) pj-lchild=s; else pj-rchild=s; /slse
6、 /for return t; / creat_tree9. 编写算法判断带表头结点的单链表L是否是递增的。若递增返回1,否则返回0。int algo1 (LNode *L) if(!L-next) return 1; p=L- while(p-next) if(p-data next-data) p=p- else return 0; return 1;10. 假设一线性表由Fibonacci数列的前n(n3)项构成,试以带表头结点的单链表作该线性表的存储结构,设计算法建立该单链表,且将项数n存储在表头结点中。Fibonacci数列根据下式求得: 1 (n=1) f(n)= 1 (n=2)
7、f(n-2)+f(n-1) (n3) LNode * Creatlist(LNode *h,int n) h=(LNode *)malloc(sizeof(Lnode); h-data=n;next=p=(LNode *)malloc(sizeof(Lnode); p-next=q=(LNode *)malloc(sizeof(Lnode);data= q-data=1; for(i=3;=n; q-next=s=(LNode *)malloc(sizeof(Lnode); s-data=p-data+q-data; s-next=NULL; p=q;q=s; return h;11. 设二叉树T采用二叉链表结构存储,数据元素为字符类型。设计算法将二叉链表中所有data域为小写字母的结点改为大写字母。 void algo2(BTNode *bt) if(bt-data=a& bt-=z) bt-data-=32;12. 假设线性表以带表头结点的循环单链表表示。void Insertlist(LNode *h,int k,ElemType y) q=h; while( p!q=p; s- q-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1