假设有两个带表头结点勺单链表前。
【答案】
voidfun(LNode*ha,LNode*hb,inti)
{for(p=hb;p->next;p=p->next);for(j=1,q=ha;jnext;;
p->next=q->next;
q->next=hb->nextfree(hb);
}
25.假设以带头结点的单链表表示有序表,单链表的类型定义如下:
typedefstructnode{
DataTypedata;
structnode*next
}LinkNode,*LinkList;
编写算法,从有序表A中删除所有和有序表B中元素相同的结点。
【答案】
(空)
26.
data域为英文字
设二叉树T采用二叉链表结构存储,数据元素为字符类型。
设计算法分别求出二叉链表中母和数字字符的结点个数。
【答案】
intletter=0,digit=0;
/*全局变量*/
voidalgo2(BTNode*bt){
if(bt){
algo2(bt->lchild);
}}27.
algo2(bt->rchild);
假设以单链表表示线性表,单链表的类型定义如下:
typedefstructnode{
DataTypedata;
structnode*next;
}LinkNode,*LinkList;
head的单向循环链
编写算法,将一个头指针为head且不带头结点的单链表改造为一个含头结点且头指针仍为表,并分析算法的时间复杂度。
【答案】LinkListf34(LinkListhead)
{
LinkListp,s;
p=head;
while(p->next)p=p->next;s=(LinkList)malloc(sizeof(LinkNode));s->next=head;
p->next=s;
head=s;returnhead;
}时间复杂度为:
O(n)
28.
Vi到顶点Vj是否存在弧。
假设有向图以邻接表方式存储,编写一个算法判别顶点【答案】intIsArcs(ALgraphG,inti,intj){
/*判断有向图G中顶点i到顶点j是否有弧,是则返回1,否则返回0*/p=G[i].firstarc;while(p!
=NULL){if(p->adjVex==j)return1;
p=p->nextarc;
}
return0;
}
29.
data域为大写字母的
设二叉树T采用二叉链表结构存储,数据元素为字符类型。
设计算法求出二叉链表中结点个数。
【答案】
intcount=0;/*count为全局变量*/
Voidalgo2(BTNode*bt){
if(bt){
if(bt->data>='A'&&bt->data<='Z')
count++;
algo2(bt->lchild);
algo2(bt->rchild);
}
}
30.假设带表头结点的双向循环链表定义如下:
typedefstructdunode{chardata;structdunode*prior,*next;
xyzzyx”和
}DuNode;现用该链表存放字符串,编写一个算法,判断该字符串是否中心对称关系。
例如字符串““xyzyx”都是中心对称的。
【答案】
intfun(DuNode*h)
{p=h->next;q=h->prior;
while(p!
=q&&p->prior!
=q)
{if(q->data==p->data){p=p->next;q=q->prior;}elsereturn0;
return1;
}
31.假设以带头结点的单链表表示线性表,单链表的类型定义如下:
typedefintDataType;typedefstructnode{
DataTypedata;structnode*next;
(假设最大值唯一存在)。
函数原型为:
}LinkNode,*LinkList;编写算法,删除线性表中最大元素voidf34(LinkListhead);
【答案】
voidf34(LinkListhead)
{
inte;
指向最大值的那个结点
LinkListp,q,s,spre;//sspre=head;s=head->next;q=s;p=s->next;while(p){
if(s->datadata)
{s=p;spre=q;}q=p;
p=p->next;
}e=s->data;spre->next=s->next;free(s);
}