设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。A.
设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。
A.单向链表
B.单向循环链表
C.双向链表
D.双向循环链表
D
设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。
A.单向链表
B.单向循环链表
C.双向链表
D.双向循环链表
D
性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(5)存储方式最节省运算时间。
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
【题目描述】
性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(5)存储方式最节省运算时间。A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
【我提交的答案】: C |
【参考答案与解析】: 正确答案:D |
解析:仅有头指针的单循环链表最费时。
不懂?
A.插入和删除操作的时间复杂度都为O(1)
B. 插入和删除操作的时间复杂度都为O(n)
C. 插入操作的时间复杂度为O(1),删除操作的时间复杂度为O(n)
D. 插入操作的时间复杂度为O(n),删除操作的时间复杂度为O(1)
阅读以下说明,Java代码将应填入(n)处的字句写在对应栏内。
【说明】
链表和栈对象的共同特征是:在数据上执行的操作与在每个对象中实体存储的基本类型无关。例如,一个栈存储实体后,只要保证最后存储的项最先用,最先存储的项最后用,则栈的操作可以从链表的操作中派生得到。程序6-1实现了链表的操作,程序6-2实现了栈操作。
import java.io.*;
class Node //定义结点
{ private String m_content;
private Node m_next;
Node(String str)
{ m_content=str;
m_next=null; }
Node(String str,Node next)
{ m_content=str;
m_next=next; }
String getData() //获取结点数据域
{ return m_content;}
void setNext(Node next] //设置下一个结点值
{ m_next=next; }
Node getNext() //返回下一个结点
{ return m_next; )
}
【程序6-1】
class List
{ Node Head;
List()
{ Head=null; }
void insert(String str) //将数据str的结点插入在整个链表前面
{ if(Head==null)
Head=new Node(str);
else
(1)
}
void append(String str) //将数据str的结点插入在整个链表尾部
{ Node tempnode=Head;
it(tempnode==null)
Heed=new Node(str);
else
{ white(tempnode.getNext()!=null)
(2)
(3) }
}
String get() //移出链表第一个结点,并返回该结点的数据域
{ Srting temp=new String();
if(Head==null)
{ System.out.println("Errow! from empty list!")
System.exit(0); }
else
{ temp=Head.getData();
(4) }
return temp;
}
}
【程序6-2】
class Stack extends List
{ void push(String str) //进栈
{ (5) }
String pop() //出栈
{ return get();}
}
● 若在单向链表上,除访问链表中所有结点外,还需在表尾频繁插入结点,那么采用 (31) 最节省时间。
(31)
A. 仅设尾指针的单向链表
B. 仅设头指针的单向链表
C. 仅设尾指针的单向循环链表
D. 仅设头指针的单向循环链表
设线性链表中结点的结构为(data,next)。已知指针q所指结点是指针结点p的直接前驱,若在*q与*p之间插入结点*s,则应执行下列()操作。
A.s->next=p->next;p->next=s;
B.q->next=s;s->next=p;
C.p->next=s->next;s->next=p;
D.p->next=s;s->next=q;
A.s↑.link:=p↑.link;p↑.link:=s
B.q↑.link:=s;s↑.link:=p
C.p↑.link:=s↑.link;s↑.link:=p
D.p↑.link:=s;s↑.link:=q
A.s↑.link:=p↑.link;p↑.link:=s
B.q↑.link:=s;s↑.link:=p
C.p↑.link:=s↑.link;s↑.link:=p
D.p↑.link:=s;s↑.link:=q
在循环双链表的p所指的结点之前插入s所指结点的操作是()。
A.p->prior->prior
B.p->prior->prior
C.s->prior->next=s
D.s->prior->prior=s