1.带头结点的单链表head为空的判断条件是(B)
A.head==NULL B.head->next==NULL
C.head->next==head D.head!=NULL
2.不带头结点的单链表head为空的条件是(A)
A.head==NULL B.head->next==NULL
C.head->next==head D.head!=NULL
3.在一个单链表中的p所指结点之前插入结点s,可执行如下操作:
s->next=p->next;
p->next=s;
t=p->data;
p->data=s->data;
s->data=t;
4.下面是将不带头结点的链表L逆置的程序,请将程序补充完整。
void invert(Node *L)
{
Node *p,*q,*r;
p=L;
q=p->next;
while(q!=NULL){
<u>r=q->next;
q->next=p;</u>
p=q;
q=r;
}
L->next=NULL;
L=p;
}
5.请编写一个将带头结点的链表L逆置的程序。
void invert(Node *L)
{
Node *p,*q,*r;
p=L;
q=NULL;
while(p!=NULL){
r=p;
p=p->next;
r->next=q;
q=r;
}
L=q;
}
6.设线性表有n元素,以下操作中,哪些在顺序表上实现比在链表上实现效率高
(1)输出第i(1<=i<=n)个元素值【顺序表O(1),链表O(n)】
(2)交换第1个和第2个元素值【同为O(1)】
(3)顺序输出这n个元素值【同为O(n)】
(4)输出与给定x相等的元素在线性表中的序号【同为O(n)】
7.设计一个算法int increase(LinkList *L),判断带头结点的单链表L是否是递增的,若是返回1,否则返回0。
int increase(LinkList *L)
{
LinkList *p;
ElemType e;
p=L->next;//p是第一个结点
e=p->data;//e是第一个结点的 数据
p=p->next;//p是第二个结点
while(p){
if(e<p->data){//e小于后继结点的数据
e=p->data