数据结构算法设计题复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计题
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)
{i]上,使所有≥x的元素均落在a[i+1..h]上。
(2)int f(int b[],int n) 或int f(int b[],int n)
{ {
int p,q;int p,q;
p=arrange(b,0,n-1,0);p=arrange(b,0,n-1,1);
q= arrange(b,p+1,n-1,1);q= arrange(b,0,p,0);
return q-p;return p-q;
} }
3. 假设线性表以带表头结点的循环单链表表示。试设计一个算法,在线性表的第k个元素前插入新元素y。假如表长小于k,则插在表尾。
【答案】
void algo1(LNode *h,int k,ElemType y){
q=h; P=h->next; j=1;
while( p!=h && j q=p; p=p->next; 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的结点个数。 【答案】 int f34(BSTree root) { int count; BSTNode *p; p=root;