线性表习题

绪言和线性表习题

一、    选择题类型

1.在一个单链表中,若p↑结点不是最后结点,在p↑之后插入s↑结点,则实行(      )

  A. s->next=pp->next=s;    

  B s->next=p->next; p->next=s

  C. s->next=p->next;p=s;    

  D. p->next=s;s->next=p;

2.与单链表相比,双链表优点之一(   ).

   A.插入删除操作更简单.       B.可随机访问

   C.可省略表头指针和表尾指针  D、 顺序访问相临结点更灵活

3.在长度为n的顺序表的第i(1in+1)个位置上插入一个元素,元素的移动次数为(   )

  An-i+1        B.n-i

  C.i            D.i-1

4.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为(   )

   A.顺序表          B.用头指针表示的单循环链表

   C、 用尾指针表示的单循环链表        D.单链表

5.在需要经常查找结点的前驱与后继的场合中,使用(      )比较合适。

  A.单链表       B 双链表      C.顺序表         D.循环链表

6.下面关于线性表的叙述中,错误的为(      )

  A.顺序表使用一维数组实现的线性表        

B.顺序表必须占用一片连续的存储单元

  C.顺序表的空间利用率高于链表   

  D 在链表中,每个结点只有一个链域

7.头结点head的单链表为空的判断条件是(      )

  A. head=NUIL                      B head->next=NUIL

  C. head->next=head                   D. head!=NUIL

8.线性表通常采用两种存储结构是(      )

  A 顺序存储结构和链式存储结构 

  B.散列方式和索引方式         

  C.链表存储结构和数组           

  D.线性存储结构和非线性存储结构

9.线性表采用链式存储时,结点的存储地址(  

   A.必须是不连续的

   B 连续与否均可

   C.必须是连续的

   D.和头结点的存储地址相连续

10.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( 

   AO1         BOn    COm     DOm+n

11、在单链表中,指针p指向元素为x的结点,实现删除x的后继的语句是(       )

A.p=p->next;            Bp->next=p->next->next;

C.p->next=p;            D.p=p->next->next;

12.在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next=head,(       )

A.p指向头结点            B.p指向尾结点

C.*p的直接后继是头结点    D*P的直接后继是尾

13.为了最快地对线性结构的数据进行某数据元素的读取操作,则其数据存储结构宜采用( )方式。

A、顺序存储   B.链式存储

C.索引存储    D.散列存储

 

二、判断题(判断下列各小题,正确的在题后括号内打“√”,错的打“╳”。)

1单链表中的头结点就是单链表的第一个结点。(     )

2、所谓数据的逻辑结构指的是数据元素之间的逻辑关系。(    )

3、在线性结构中,每个结点都有一个直接前驱和一个直接后继。(      )

 

三、填空题

1、在单链表中设置头结点的作用_   简化插入删除算法。

2.head为带有头结点的单链表的头指针,则判断单链表为空的条件是:______ head->next= =NULL____

3.带头结点的循环链表L为空表的条件是_    L->next=L __  __。带头结点的双循环链表L为空表的条件是_    L->next=L->prior=L     

4在如图所示的链表中,若在指针p所指的结点之后插入数据域值相继为ab的两个结点,则可用下列两个语句实现该操作,它们依次是_ __ s->next->next=p->next _________ p->next=s_____

 

 

5.通常单链表的头结点指的是_ ____在单链表第一个节点之前增设的一个类型相同的结点___;单链表的首结点指的是__ ___表结点中的第一个结点___

6、在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为     p->next->next=head       

7、从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需____ ____向前移动____一个位置。

 

1、简化插入删除算法.

2head->next= =NULL_____

3  L->next=L ___L->next=L->prior=L 

4__s->next->next=p->next_______p->next=s_______

 

 

5_在单链表第一个结点之前增设的一个类型相同的结点_______ __表结点中的第一个结点______

6p->next->next=head        

7__向前移动__

 

 

 四、算法阅读题

1.以下函数中,h是带头结点的双向循环链表的头指针。

  (1)说明程序的功能;

  (2)当链表中结点数分别为16(不包括头结点)时,请写出程序中while循环体的执行次数。

  int f(DListNode *h)

  {

    DListNode *p,*q;

    int j=1;

    p=h->next;

    q=h->prior;

    while((p!=q || p->prior!=q)&&(j!=0))

       if(p->data==q->data)

       {

         p=p->next;

         q=q->prior;

        }

        else j=0;

       return j;

   }

 

1)是否对称

21----06---3

2阅读下面的算法

       LinkList mynote(LinkList L)

       {//L是不带头结点的单链表的头指针

             if(L&&L->next){

                  q=LL=L>nextp=L

        S1       while(p>next) p=p>next

        S2       p>next=qq>next=NULL

              }

              return  L

            }

    请回答下列问题:

   1)说明语句S1的功能;

    2)说明语句组S2的功能;  

       3)设链表表示的线性表为(a1,a2, ,an,写出算法执行后的返回值所表示的线性表。

 

(1)查询表的尾节点

  (2)将第一个节点链接到表的尾部成为新的尾节点

(3)a2,a3,….an,a1

 

 

五、应用题

1、假定在学生的档案中含有:姓名、学号、年龄、性别。如采用线性表作为数据结构来实现档案管理问题,分别给出线性表的在顺序实现下的类型定义和在链接实现下的类型定义。

2.假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为O(n)的算法,删除表中所有数值相同的多余元素,并释放结点空间。例如:

(7101021304242425170)

经算法操作后变为

(7102130425170)

参考答案:

typedef struct node {

             int data;

             struct node * next;

}LinkList;

Delete_Eq(LinkList * head)

{

  LinkList * p, * q, * s;

  p=head;

  do{

         q= p->next;

if(p->data = =  q->data)

{  s= q; free(s); q = q->next; }

else

  p=q;

}while(p->next != head);

}

2、线性表逆置

void Convers(LinkList *head)

{

   LinkList * p, *q, *r;

   p = head;

   q = p->next;

   p->next = NULL;

   while ( q!= NULL)

   {

    r=q->next;

        q->next=p;

        p=q;

        q=r;

   }

   head = p;

}

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
2009年下半年程序员考试最后冲刺全真模拟试题一   本套试题是遵循《全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲与培训指南(2009版)》中程序员考试的要求,根据最近两年的程序员考试的命题规律整理编写的,基本涵盖了所有重要考点,其难度、题型、题量和命题的风格接近于考试真题(对部分答案进行了详细的分析和说明)。特供参加2009年11月考试的考生最后冲刺使用。   该套试卷分为上午试卷和下午试卷,上午试卷共75道选择题,每题1分,共75分;下午试卷共5道题,每题15分,共75分。    【部分内容展示】   上午试卷   …………   31.在多级存储体系中,"Cache-主存"结构的作用是解决( )的问题。   A.主存容量不足   B.辅存与CPU速度不匹配   C.主存与辅存速度不匹配   D.主存与CPU速度不匹配   【答案】D     32.请从下面浮点运算器的描述中选出两个描述正确的句子( )。   A.浮点运算器可用两个松散连接的定点运算部件--阶码部件和尾数部件来实现   B.阶码部件可实现加、减、乘、除4种运算   C.阶码部件只可进行阶码相加、相减和相乘操作,而不能进行除操作   D.尾数部件只进行乘法和除法运算   【答案】A   …………      下午试卷   …………   试题三   假设以头结点的单循环链表作非递减有序线性表存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。   例如:链表初始元素为:   (7,10,10,21,30,42,42,42,51,70)   经算法操作后变为:   (7,10,21,30,42,51,70)   【函数1】   void deleteklist(LinkList head)   {   LinkNode*p,*q;   p=head->next;   while(p!=head)   {   q=p->next;   while((1) )   {   (2) ;   free(q);   q=p->next;   }   p=p->next;   }   }   【说明2】   已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。   【函数2】   #include   typedef struct node {   int data;   stuct node leftChild,rightchild;   }BintreeNode;   typedef BintreeNode*BinaryTree;   void ConstrncTree(int T[],int n,int i,BintreeNode*&ptr)   {   if(i>=n) (3) ;∥置根指针为空   else   {   ptr=-(BTNode*)malloc(sizeof(BTNode))   ptr->data=T[i];   ConstrucTree(T,n,2*i+1, (4) );   ConstrucTree(T,n, (5) ,ptr->rightchild);   }   }   main(void)   {/*根据顺序存储结构建立二叉链表*/   Binarytree bitree;int n;   printf("please enter the number of node:\n%s";n);   int*A=(int*)malloc(n*sizeof(int));   for(int i=0;i<n;i++)scanf("%d,A+i);/*从键盘输入结点值*/   for(int i=0;i<n;i++)printf("%d",A[i]);   ConstructTree(A,n,0,bitree);   }   【答案】   (1)q!=head &&q->data==p->data   (2)p->next=q->next   (3)ptr=NULL   (4)ptr->leftchild   (5)2*i+2   …………
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值