线性表(3)--习题

本文提供了一系列关于链表的习题,包括带头结点和不带头结点的单链表判断、插入、逆置等操作,以及线性表在顺序表和链表上的操作效率比较。此外,还涉及有序链表的合并、动态查找方法的选择等问题,旨在深化对链表和线性表操作的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值