回 帖 发 新 帖 刷新版面

主题:链表选择题,路过的看看你会吗?

5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用(  ) 存储方式最节省运算时间。
   a.单链表   b.双链表   c.单循环链表  d.带头结点的双循环链表
 9.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则   采用(  )存储方式最节省运算时间
a.单链表b.仅有头指针的单循环链表c. 双链表d仅有尾指针的单循环链表
10.若某线性表中最常用的操作是取第I个元素和找第I个元素的前趋元素,则采用(  )
    存储方式最节省运算时间
    a.单链表  b顺序表  .c双链表 .d循环链表
请教以上3道题,选什么答案,为什么?

回复列表 (共13个回复)

沙发

5题选:d
9题选:b
10题选:C

板凳

9题
为什么选b?

3 楼

因为是单循环链表,所以head前一个就是最后一个撒.那不是很快啊.

4 楼

c
b
c

5 楼

个人观点,9题d,abc在最后一个元素后插入一个元素都需要扫描一遍整个链表,而d有尾指针的单循环链表不需要,同时删第一个元素也比较方便,尾指针的next就指第一个元素。

还有我觉得题目应该问用哪个最方便。

6 楼

我觉得是
c
b
c
和四楼兄弟一样的
楼上的兄弟
对于第9题
并没有说循环链表一定要带尾指针啊
我觉得是c
因为c有前驱和后继指针来实现查找应该是很方便的

7 楼


 我觉得是 d b b
第10题选b 的理由,顺序表查找用的时间比链表用的时候少。

8 楼

还有就是楼主,你以前给我修改的程序,我有些问题要请教你,编译可以通过但是我建立的节点却显示不出来,只能显示个0作为第一个接点的元素值,想了好久,还是不大明白为什么?请指点






#include <malloc.h>
#include<stdio.h>
 #include<conio.h>
 #define N 3
 typedef struct node
 { int data;
   struct node *next;
 }node,LNode,*LinkList;
 void CreateList_L(LinkList L,int n)
{/* 顺序输入n个元素的值,建立带头结点的单链线性表 */
 LinkList p,q; int i, x;
  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;
  q=L;
  for(i=1;i<=n;i++)
  {p=(LinkList)malloc(sizeof(LNode));
   printf("\n请输入第%d个元素",i);
   scanf("%d",&x);
   p->data=x;
   p->next=q->next;
   q->next=p;
   q=q->next;
  }
 } 
 node* get(node *p,int i)
 {/* 找到第i-1个结点 */
 node *q; int j;
  q=p;j=0;
  while(q&&j<i-1) {q=q->next;j++;}
  if(!q ||j>i-1) return 0;
   else return q;
 }
 charu(node *p,int x,int i)
   {/* 单链表带头结点,p是头指针 */
     node *s,*q;
     s=(node *)malloc(sizeof(node));
    s->data=x;
    if(i==1)
      {s->next=p->next;
       p->next=s;
       }
       else
        {q=get(p,i-1);
         if(q==NULL)
            return 0;
              else
                {s->next=q->next;
                  q->next=s;
                 }
         }
         return 1;
     }
   main()
   {  node *p,*q;
       int i;
       CreateList_L(p,N);/* 创建链表 */
       printf("新创建的链表是:");
       q=p->next;
       while(q) {printf("%3d",q->data);getch();
       q=q->next;}/* 输出链表 */

        charu(p,2,1);/* 2为插入的元素直,1为插入的位置*/
        printf("\n在第1个位置插入数值2后,链表为:");
         
       q=p->next;
       while(q) {printf("%3d",q->data);getch();q=q->next;}
       printf("\n");
   }
win-tc下编译的

9 楼

void CreateList_L(LinkList &L,int n)//L必须是引用参数
{/* 顺序输入n个元素的值,建立带头结点的单链线性表 */
 LinkList p,q; int i, x;
  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;
  q=L;
  for(i=1;i<=n;i++)
  {p=(LinkList)malloc(sizeof(LNode));
   printf("\n请输入第%d个元素",i);
   scanf("%d",&x);
   p->data=x;
   p->next=q->next;
   q->next=p;
   q=q->next;
  }
 } 
这样就可以了

10 楼

我知道是引用参数,但在
WIN-TC只能用指针表示,你用的什么编译器?

我来回复

您尚未登录,请登录后再回复。点此登录或注册