数据结构-链表习题

判断题

1.在单向链表中,头指针中存放的是头结点的内容。

     T      F

2.单向链表中的每个结点都需要动态分配内存空间。

     T      F

3.通常使用结构的嵌套来定义单向链表结点的数据类型。

     T      F

4.用链表代替数组进行数据操作时,查询更加方便

     T      F

选择题

1.以下程序的输出结果是( )。

struct HAR
{int x, y; struct  HAR  *p;} h[2];
int main(void)
{ 
 h[0].x=1; h[0].y=2; h[1].x=3; h[1].y=4; h[0].p=h[1].p=h; printf(“%d%d ”,(h[0].p)->x,(h[1].p)->y); return 0;
}
    A.12
    B.23
    C.14
    D.32
//都指向首地址了

2.以下程序的输出结果是( )。

struct NODE{ int num;  struct NODE  *next; };
int main(void)
{ struct NODE *p,*q,*r;
  p=(struct NODE*)malloc(sizeof(struct NODE));
  q=(struct NODE*)malloc(sizeof(struct NODE));
  r=(struct NODE*)malloc(sizeof(struct NODE));
  p->num=10; q->num=20; r->num=30;
  p->next=q;q->next=r;
  printf(“%d
”,p->num+q->next->num);	
  return 0;		}
    A.10
    B.20
    C.30
    D.40

3.设有如下定义的链表,则值为7的表达式是()

struct st{
      int n;
      struct st  *next;
} a[3] = {5, &a[1], 7, &a[2], 9, NULL}, *p = &a;
    A.p->n
    B.(p->n)++
    C.(++p)->n
    D.p->next->n

4.在一个单链表head中,若要在指针p所指结点后插入一个q指针所指结点,则执行()。

    A.p->next=q->next; q->next=p;
    B.q->next=p->next; p=q;
    C.p->next=q->next; p->next=q;
    D.q->next=p->next; p->next=q;

5.下面程序段输入一行字符,按输入的逆序建立一个链表。

struct node{
  char info;
  struct node *link;
} *top, *p;
char c;
top=NULL;
while((c=getchat())!='
')
{  p=( struct node*)malloc(sizeof(struct node));
   p->info=c;
     (1分)   ;
   top=p;
}
    A.top->link=p
    B.p->link=top
    C.top=p->link
    D.p=top->link
//顺序的话,就是和上面一样的尾插,这个是头插

6.若已建立下面的链表结构,指针p、q分别指向图中所示结点,则不能将q所指结点插入到链表末尾的语句是( )。

1.jpg

    A.q->next=NULL; p=p->next; p->next=q;
    B.p=p->next; q->next=p->next; p->next=q;
    C.p=p->next; q->next=p; p->next=q;
    D.p=(*p).next; (*q).next=(*p).next; (*p).next=q;

填空题

1.下列函数用于将链表中各结点的数据依次输出。

struct student {
    long data;
    struct student *next;
};
void print(struct student *head)
{
    struct student *p ;
    p=head;
    if(head != NULL)
        do {
            printf("%ld ”, p->data);
                    ;
        } while ( );
}

2.已建立学生“英语”课程的成绩链表(成绩存于score域中,学号存于num域中), 下列函数用于输出不及格学生的学号和成绩,及补考学生人数。

void require(struct student *head)
{
    struct student *p;
    long x;
    if( head != NULL) {
        x=0;
                ;
        while(p != NULL) {
            if( ) {
                printf(”%7d %6.1f ”, p->num, p->score);
                x++;
            }
            p = p->next;
        }
        printf(”%ld ”, x);
    }
}

转自 https://www.cnblogs.com/nonlinearthink/p/11039494.html

原文地址:https://www.cnblogs.com/xx123/p/14012487.html