1. (12分)已知有序整数序列用链表存储。阅读下面算法example,并回答下列问题:
(1) 写出执行example(a,b)的返回值,其中a和b分别为指向存储整数序列{2,4,5,7,9,12}和存储整数序列{2,4,5,7,9}的链表的头指针;(4分)
typedef struct node
{ int data;
struct node *next;
}
int example(LinkList ha, LinkList hb)
{ /*LinkList是带有头结点的单链表 */
/*ha和hb分别为指向存储两个有序整数集合的链表的头指针 */
LinkList pa,pb;
pa=ha->next;
pb=hb->next;
while(pa && pb && pa->data==pb->data)
{ pa=pa->next;
pb=pb->next;
}
if(pa==NULL && pb==NULL) return 1;
else return 0;
}
(1) 执行example(a,b)的返回值:0
(2) 简述算法example的功能; (4分)
(2) 判断两个整数序列是否相等,相等返回1,否则返回0
(3) 写出算法example的时间复杂度。(4分)
(3) Min(n,m),其中m,n分别为两个表的表长。
typedef struct node /*实现结构体node */
{ int data;
struct node *next;
} Lnode, *LinkList
/*命名两个名字, Lnode, *LinkList,链表的结点都是由 数据域 和 指针域组成, 在结构体中定义一个 int 类型的 变量 data记录数据域,再定义一个Node 类型的指针 next, 用来指向下一个结点 。*/
int example(LinkList ha, LinkList hb)
{ /*LinkList是带有头结点的单链表 */
/*ha和hb分别为指向存储两个有序整数集合的链表的头指针*/
LinkList pa,pb;
pa=ha->next;
pb=hb->next;
while(pa && pb && pa->data==pb->data)
{pa=pa->next;
pb=pb->next;
}
/*&&是逻辑与运算符,运算对象需要同时满足,判断语句才执行。判断两个整数序列是否相等 */
if(pa==NULL && pb==NULL) return 1;
/*如果指向元素为空,返回1 */
else return 0;
/*否则返回0 */
}