第二章线性表
1、
描述一下三个概念的区别:头指针,头结点,首元结点。并给予图示。
2、对于有头结点的单链表,分别写出定位成功时,实现下列定位语句序列。
(1)定位到第i个结点ai;
(2)定位到第i个结点的前驱ai-1;
(3)定位到尾结点;
(4)定位到尾结点的前驱。
3、已知L是有表头结点的单链表,且P结点既不是首元结点,也不是尾结点,试写出实现
下列功能的语句序列。
(1)在P结点后插入S结点;
(2)在P结点前插入S结点;
(3)在表首插入S结点;
(4)在表尾插入S结点.
p=head;
p=head; j=0;
while ( p && jnext; j++;}
p=head; j=0;
while ( p && j
p=head;
while ( p ->next ) p=p->next;
while ( p->next->next ) p=p->next;
(1)s->next=p->next; p->next=s;
(2)q=L;
while( q->next!=p) q=q->next;
s->next=p 或 q->next ;
q ->next=s;
(3 ) s->next=L->next; L->next=s;
(4)q=L;
while( q->next!=NULL) q=q->next;
s->next= q->next ; q->next=s;
4、设计算法:在顺序表中删除值为e的元素,删除成功,返回1;否则,返回0。
5、设计一个算法,将一个带头节点的数据域依次为a1,a2,…,an(n≥3)的单链表的所
有节点逆置,即第一个节点的数据域变为a
n,…,最后一个节点的数据域为a1
。(注意:先
用自然语言描述算法基本思想,然后用类C++语言描述)
int Sqlist
{ for (i=1; i<=length; i++) // 按值顺序查找 * i可从0开始
if (elem[i-1]= =e) // 找到,进行删除操作
{ for ( j=i; j
length - - ; // 表长减一
return 1 ; //删除成功,返回 1
}
return 0 ; // 未找到,删除不成功,返回 0
}
1 void invert(LinkList *&head) //逆置链表处理
2 {
3 LinkList* p = head->next;
4 LinkList* pri = NULL; //之前的节点
5 while(p){
6 LinkList* q = new LinkList;
7 q->data = p->data; //把当前节点记录下来
8 q->next = pri;
9 pri = q;
10 head->next = q;
11 LinkList* t = p; //当前节点没用了删除掉
12 p=p->next;
13 delete(t);
14 }
15 }