数据结构算法设计题复习题(共11页).doc
《数据结构算法设计题复习题(共11页).doc》由会员分享,可在线阅读,更多相关《数据结构算法设计题复习题(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上算法设计题1. 设二叉树bt采用二叉链表结构存储。试设计一个算法输出二叉树中所有非叶子结点,并求出非叶子结点的个数。【答案】int count=0;void algo2(BTNode *bt) if (bt) if(bt-lchild | bt-rchild) printf(bt-data); count+; algo2(bt-lchild); algo2(bt-rchild); 2. 阅读下列函数arrange() int arrange(int a,int 1,int h,int x) /1和h分别为数据区的下界和上界 int i,j,t; i=1;j=h; wh
2、ile(ij) while(i=x)j-; while(i=x)i+; if(ij) t=aj;aj=ai;ai=t; if(ainext; j=1;while( p!=h & jnext; j+;s=(LNode *)malloc(sizeof(Lnode);s-data=y;q-next=s;s-next=q; 4. 二叉排序树的类型定义如下:typedef struct BSTNode 二叉排序树的结点结构int data; 数据域struct BSTNode *lchild, *rchild; 左、右孩子指针BSTNode,*BSTree;设计递归算法,统计一棵二叉排序树T中值小于a的
3、结点个数。【答案】int f34(BSTree root) int count; BSTNode *p; p=root; if ( p & p-datalchild); 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 & !p-rchild)
4、 return p; if(p-lchild) EnQueue(Q,p-lchild); if(p-rchild) EnQueue(Q,p-rchild); 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(“ %
5、cs lchild is %cn”, btk, bt2*k); else printf(“ %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(0next; p=p-next); for(j=1,q=ha;jnext; p-next=q-next; q-next=hb-next ; free(hb); 8. 设二叉树T已按完全二叉树的
6、形式存储在顺序表T中,试设计算法根据顺序表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; s-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
7、 pj-rchild=s; /slse /for return t; / creat_tree9. 编写算法判断带表头结点的单链表L是否是递增的。若递增返回1,否则返回0。【答案】int algo1 (LNode *L) if(!L-next) return 1; p=L-next; while(p-next) if(p-data next-data) p=p-next; else return 0; return 1;10. 假设一线性表由Fibonacci数列的前n(n3)项构成,试以带表头结点的单链表作该线性表的存储结构,设计算法建立该单链表,且将项数n存储在表头结点中。Fibonacc
8、i数列根据下式求得: 1 (n=1) f(n)= 1 (n=2) f(n-2)+f(n-1) (n3)【答案】 LNode * Creatlist(LNode *h,int n) h=(LNode *)malloc(sizeof(Lnode); h-data=n; h-next=p=(LNode *)malloc(sizeof(Lnode); p-next=q=(LNode *)malloc(sizeof(Lnode); p-data= q-data=1; for(i=3;inext=s=(LNode *)malloc(sizeof(Lnode); s-data=p-data+q-data;
9、s-next=NULL; p=q;q=s; return h; 11. 设二叉树T采用二叉链表结构存储,数据元素为字符类型。设计算法将二叉链表中所有data域为小写字母的结点改为大写字母。【答案】 void algo2(BTNode *bt) if (bt) if(bt-data=a& bt-datadata-=32; algo2(bt-lchild); algo2(bt-rchild); 12. 假设线性表以带表头结点的循环单链表表示。试设计一个算法,在线性表的第k个元素前插入新元素y。假如表长小于k,则插在表尾。【答案】void Insertlist(LNode *h,int k,Elem
10、Type y) q=h; P=h-next; j=1; while( p!=h & jnext; j+;s=(LNode *)malloc(sizeof(Lnode); s-data=y; q-next=s; s-next=q; 13. 有一带表头结点的单链表,其结点的元素值以非递减有序排列,编写一个算法在该链表中插入一个元素x,使得插入后的单链表仍有序。【答案】void algo1 (LNode *H, ElemTp x) s=(LNode *) malloc (sizeof(LNode); s-data=x; q=H; p=H-next;while ( p & p-datanext;s-n
11、ext=p; q-next=s; 14. 二叉排序树的类型定义如下:typedef struct BSTNode 二叉排序树的结点结构int data; 数据域struct BSTNode *lchild, *rchild; 左、右孩子指针BSTNode,*BSTree;设计递归算法,统计一棵二叉排序树T中值小于a的结点个数。【答案】int f34(BSTree root) int count; BSTNode *p; p=root; if ( p & p-datalchild); return count;15. 有一带表头结点的单链表,其结点的data域的类型为字符型,编写一个算法删除该链
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 设计 复习题 11
限制150内