题目详情
当前位置:首页 > 计算机考试 > 初级程序员
题目详情:
发布时间:2024-07-28 06:02:02

[简答题]【说明】 设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。 【函数】 void Locate( int &x) { <结点类型说明> * p =first -> next; while(p!=frist&& (1) )P=P->next; if(p! =first) /*链表中存在x*/ { (2) ; <结点类型说明> * current = P; /*从链表中摘下这个结点*/ Current -> prior -> next = current -> next; Current -> next -> prior = current -> prior; P = current -> prior; /*寻找重新插入的位置*/ While(p! =first && (3) )p=p->prior; Current-> next = (4) ; /*插入在P之后* Current -> prior = P; P -> next -> prior = current; P->next= (5) ; } else printf("Sorry. Not find! /n"); /*没找到*/ }

更多"【说明】 设有一个带表头结点的双向循环链表L,每个结点有4个数据成"的相关试题:

[简答题]【说明】
设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
void Locate( int &x)
<结点类型说明>
* p =first -> next;
while(p!=frist&& (1) )P=P->next;
if(p! =first) /*链表中存在x*/
(2) ;
<结点类型说明>
* current = P; /*从链表中摘下这个结点*/
Current -> prior -> next = current -> next;
Current -> next -> prior = current -> prior;
P = current -> prior; /*寻找重新插入的位置*/
While(p! =first && (3) )p=p->prior;
Current-> next = (4) ; /*插入在P之后*
Current -> prior = P;
P -> next -> prior = current;
P->next= (5) ;

else printf("Sorry. Not find! /n"); /*没找到*/

[简答题]设带表头结点的双向链表的定义为
typedef int ElemType;
typedef struct dnode∥双向链表结点定义
ElemType data;∥数据
struct dnode*lLink,*rLink;∥结点前驱与后继指针
)DblNode;
typedef DblNode*DblList;∥双向链表
试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域lLink把所有结点按照其值从小到大的顺序连接起来。
[简答题]【说明】设单链表的结点类和链表类的定义如下,链表不带有表头结点。请填空: #include<iostream.h> #include<assert.h> template<class T>class List; template<class T>class ListNOde{ friend (1) ; private: T data; ListNode<T> *link; public: ListNode( ):link(NULL)( ) ListNOde(const T& item,ListNOde<T>*next=NULL) :data(item),link(next){} }; template<class T>class List{ private: ListNode<T>*first; void createList(T A[],int n,int i,ListNOde<T>*&p); void printList(ListNOde<T>*p); public: List( ); ~List( ); friend ostream& operator<<(ostream& ost,List<T>&L); friend istream& operator>>(istream& ist,List<T>&L); }; template<class T> istream& operator>>(istream& ist,List<T>&1){ int i,n; ist>>n; T A[n]; for(i=0;i<n;i++) (2) ; createList(A,n,0,first); } template<class T> void List<T>::createList(TA[],int n,int i,ListNOde<T>*& p){ //私有函数:递归调用建立单链表 if(i==n)p=NULL; else{ p=new ListNode<T>(A[i]); assert(p !=NULL)
[简答题]【说明】设单链表的结点类和链表类的定义如下,链表不带有表头结点。请填空:
#include<iostream.h>
#include<assert.h>
template<class T>class List; template<class T>class ListNOde
friend (1)
private:
T data;
ListNode<T> *link;
public:
ListNode( ):link(NULL)( )
ListNOde(const T& item,ListNOde<T>*next=NULL)
:data(item),link(next)

template<class T>class List
private:
ListNode<T>*first;
void createList(T A[],int n,int i,ListNOde<T>*&p);
void printList(ListNOde<T>*p);
public:
List( );
~List( );
friend ostream& operator<<(ostream& ost,List<T>&L);
friend istream& operator>>(istream& ist,List<T>&L);

template<class T>
istream& operator>>(istream& ist,List<T>&1)
int i,n; ist>>n;
T A[n];
for(i=0;i<n;i++) (2)
createList(A,n,0,first);

template<class T>
void List<T>::createList(TA[],int n,int i,ListNOde<T>*& p)
//私有函数:递
[填空题]已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
(1)在P结点之前插入S结点的语句序列是______;
(2)在表首插入S结点的语句序列是______。
a P—>nex=S b P—>next=P—>next—>next
c P—>next=S—>next d S—>next=P—>next
e S—>next=L f Q=P
g while(P—>next!=Q>P=P—>next
h while(P—>next!=NULL)P=P—>next
i P=L j L=S
[简答题]设有一个带头结点的循环单链表,其结点值均为正整数。试设计一个算法,反复找出单链表中结点值最小的结点,并输出之,然后将该结点从中删除,直到单链表空为止,最后再删除表头结点。
[单项选择]对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为()。
A. n-1
B. n
C. n+1
D. 2n
[填空题]带头结点的双向循环链表L为空的条件是______。
[简答题]设有带头结点的循环双链表表示的线性表L=(a1,a2,……,an-1,an)。设计在时
间和空间上都尽可能高效的算法,将L改造成L=(a1,a3,……,an,……a4,a2)。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++或JAVA语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
[简答题]设有带头结点的循环双链表表示的线性表L=(a1,a2,…,an-1,an)。设计在时间和空间上都尽可能高效的算法,将L改造成L=(a1,a3,…,an,…,a4,a2)。要求:
给出算法的基本设计思想。
[填空题]双向循环链表找前驱结点和后继结点的时间复杂度为______。
[简答题]分别写出删除单向和双向循环链表中指针P所指的结点的直接后继结点(非尾结点)对应的语句。
(1)单向循环链表。
(2)双向循环链表。
[填空题]【说明2.1】
L为一个带头结点的循环链表。函数deletenode(LinkList L, int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
【函数2.1】
LinkList deletenode(LinkList L, int c)
    
LinkList Lc,p,pre;
pre=L;
p= (1) ;
Lc=(LinkList)malloc(sizeof(ListNode) );
Lc->next=Lc
while(p!=L)
if(p->data>c)

(2) ;
(3) ;
Lc->next=p;
p=pre->next;
    
else

pre=p;
p=pre->next;

return Lc;

【说明2.2】
递归函数dec_to_k_2(int n, int k)的功能是将十进制正整数n转换成k<2≤k≤9)进制数,并打印。
【函数2.2】
dec_to_k_2(int n, int k)
/*将十进制正整数n转换成k(2≤k≤9)进制数*/
if(n!=0)

dec_to_k_2( (4) ,k);
printf("%d", (5) );


[填空题]【说明2.1】 L为一个带头结点的循环链表。函数deletenode(LinkList L, int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。 【函数2.1】 LinkList deletenode(LinkList L, int c)   {   LinkList Lc,p,pre; pre=L; p= (1) ; Lc=(LinkList)malloc(sizeof(ListNode) ); Lc->next=Lc while(p!=L) if(p->data>c) { (2) ; (3) ; Lc->next=p; p=pre->next;     } else { pre=p; p=pre->next; } return Lc; } 【说明2.2】 递归函数dec_to_k_2(int n, int k)的功能是将十进制正整数n转换成k<2≤k≤9)进制数,并打印。 【函数2.2】 dec_to_k_2(int n, int k) { /*将十进制正整数n转换成k(2≤k≤9)进制数*/ if(n!=0) { dec_to_k_2( (4) ,k); printf("%d", (5) ); } }
[填空题]删除双向循环链表中*p的前驱结点(存在)应执行的语句是______。

我来回答:

购买搜题卡查看答案
[会员特权] 开通VIP, 查看 全部题目答案
[会员特权] 享免全部广告特权
推荐91天
¥36.8
¥80元
31天
¥20.8
¥40元
365天
¥88.8
¥188元
请选择支付方式
  • 微信支付
  • 支付宝支付
点击支付即表示同意并接受了《购买须知》
立即支付 系统将自动为您注册账号
请使用微信扫码支付

订单号:

截图扫码使用小程序[完全免费查看答案]
请不要关闭本页面,支付完成后请点击【支付完成】按钮
恭喜您,购买搜题卡成功
重要提示:请拍照或截图保存账号密码!
我要搜题网官网:https://www.woyaosouti.com
我已记住账号密码