ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

河北科技大学——数据结构课后习题

2021-09-26 13:33:22  阅读:385  来源: 互联网

标签:结点 单链 线性表 元素 NULL next 课后 习题 数据结构


有需要河北科技大学计算机专硕考研真题的同学,私信留下邮箱即可。

第一章、绪论作业

一、填空题

1.算法的时间复杂度除了与问题的规模有关外,还与待处理的数据的(待处理数据的初态 )有关。

2.把长度为n的单链表链接在长度为m的单链表之后的算法,其时间复杂度为( O(m) )。

3.假设时间复杂度为O(nlogn)的算法在有256个元素的数组上运行需要4ms,则在具有512个元    素的数组上运行需要( 9 )ms。

解析:此题可按照比例计算,将256和512分别代入时间复杂度计算公式然后分别比上自己需要的时间,即可求出具有512个元素的数组运行所需要的时间。这里的logn是以2为底的对数,还有一种解法:设一个系数k,根据k*256log256=4,即可求出k的值,然后再代入计算k*512log512即可得出运行时间。

二、分析算法时间复杂度

设n是偶数,下面程序段中语句y=y+i*j的执行次数是多少?该算法的时间复杂度是多少?要求列出计算公式。 

for (i=1;i<=n;i++)

if(2*i<=n)

    for (j=2*i; j<=n; j++)

    y=y+i*j;

解析:总执行次数为:(n-1)+(n-3)+...+3+1=n2/4;算法时间复杂度O(n^2)。这个题做的时候就是列出语句的执行次数,然后自己去找规律。

第二章、线性表作业

一、选择题 1.对顺序存储的线性表,设其长度为 20,在任何位置上插入或删除操作都是等概率的。插入 一个元素时平均要移动表中的( A )个元素。 A.10                              B.9                             C.11                     D.12   2、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采 用( D )存储方式最节省运算时间。 A.单链表        B.仅有头指针的单循环链表       C.双链表       D.仅有尾指针的单循环链表 
  3、对线性表采用折半查找法,该线性表必须( B )。 A.采用顺序存储结构                                 B.采用顺序存储结构,且元素按值有序 C.采用链式存储结构                                 D.采用链式存储结构,且元素按值有序 4.线性表采用链式存储时,其地址( D ) 。 A. 必须是连续的   B. 部分地址必须是连续的   C. 一定是不连续的    D. 连续与否均可以 5.对顺序存储的线性表,设其长度为 n,在任何位置上插入或删除操作都是等概率的。插入 一个元素时平均要移动表中的( A )个元素。 A. n/2                  B.(n+1)/2                   C.(n-1)/2                      D. n 6.在有 15 个元素的顺序表中,删除一个元素时,平均移动元素的次数为 ( B ) 。 A.14                  B.7                         C.15                          D.8

二、填空题

1、带头结点的循环链表L为空的条件是   L->next==L              。

2.存取结构是在一个数据结构上对查询操作的时间性能的一种描述,通常有两种存取结构:顺序存取和 随机存取  。(还有索引存取和散列存取,共4种存取结构。)

3.将长度为n的单链表链接在长度为m的单链表之后的算法,其时间复杂度度为  O(m)  

4.在循环双链表中,完成新结点S插入到结点P后面的操作,需要修改四个指针: s->prior=p ; s->next=p->next    p->next->prior=s   ;    p->next=s    ;

5. 在循环双链表中,设指针p 指向待删除结点,删除操作需要两条语句: p->prior->next=p->next   p->next->prior=p->prior   。

6.设有一个双链表,每个结点中除了有Prior、Data和Next三个分量外,还有访问频度分量Fred,根据题意写出该结点的存储结构定义,结点名称为DulNode。
 

Typedef struct  DulNode
{  
    Elemtype  data;
    Int  freq;
    Struct DulNode   *prior,*next;
}DulNode;

三、判断题

( 错 )1、线性表的逻辑顺序与存储顺序总是一致的。

( 错)2、在单链表中要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

( 错)3、线性表的链式存储结构优于顺序存储结构。

( 错)4、算法的原地工作的含义是指不需要任何额外的辅助空间。

四、算法设计题

1. 已知带头结点的单链表L,试写一算法将单链表逆置。(12分)

//原地将链表逆置
typedef struct LNode
{
   ElemType data;
   struct LNode *next ;
}LNode, *LinkList; 2分

void  Inverse( LinkList L)           1分             
{
  p = L->next;               2 分                 
  L->next = NULL;           1 分               
  while (p != NULL)          2 分               
  {
    q = p->next;             1 分                   
    p->next = L-next;         1 分                
    L->next = p;             1分                     
    p = q;                  1 分                   
  }
}

//创建新链表逆置
LinkList* new,p;
new=NULL;
if(L==NULL) return 0;
p=L->next;
L->next=NULL;
while(p)
{
    p->next=new;
    new=p;
    p=p->next;
}
L->next=new;

2.设有不带头结点单链表L,结点结构为  ,以数据域的值非递减有序排列,现插入一个数据为e的元素,使得插入后仍然有序,编写此算法。(12分)
 

void InsertOrder(LinkList L, DataType e)    1分                 
{
  ListNode *s, *p, *pre;
  s = (ListNode *)malloc(sizeof(ListNode)); //或s=new ListNode; 1分
  s->data = e;                1分                               
  if(L==NULL||e<p->data)      1分
  {
   s->next=L; 
   L=s; 
   return;       1分
  }                                                          
  pre = L;  
  p = L->next;           1分                             
  while(p!=NULL && p->data<=e)     2分                        
  {
    pre = p; 
    p = p->next;           2分                              
  } 
  pre->next = s;                   1分                                    
  s->next = p;                     1分                                     
}

3.带头结点的单链表L,判断非空单链表是否递增有序。(12分)

Int increase(Node *first)          2分
{
    P=first->next;                  2分    
    While(p->next!=NULL)            2分
    {
        q=p->next;                         2分
        if  (p->data<q->data)  p=q;    2分
        Else return   0;                   1分      
    }
    Return 1;                           1分     
}

4.已经带头结点的单链表,头指针为first,复制该单链表。(12分)

Node *Copy(Node *first)   2分
{
    Head=(Node*)malloc(sizeof(Node));//headwz 新链表的头指针 1分
    P=first->next;r=head;            //工作指针p和尾指针r分别初始化 1分
    While(P!=NULL)                                     2分
    {    
        S=(Node*) malloc(sizeof(Node));s->data=p->data; //复制结点  2分
        r->next=s;r=s; //尾插法插入新链表1分
        p=p->next;       1分
    }
    r->next=NULL;   1分    
    return head;      1分
}

5. 假设在长度大于1的循环单链表中,既无头结点也无头指针,S为指向单链表中某个结点的指针,试编写算法删除结点S的前驱结点;写出该结点的存储结构定义。(12分)

void Del(Node *s)        2分
{
    p=s;                   2分
    while(p->next->next != s)  2分
         p=p->next;    1分
    r=p->next;      1分
    p->next=s;      2分
    free(r);         2分
}

标签:结点,单链,线性表,元素,NULL,next,课后,习题,数据结构
来源: https://blog.csdn.net/FHNCSDN/article/details/120484705

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有