有以下程序段typedef struct node { int data; struct node *next; } *NODE;NODE p;以下叙述正确的是A)p 是指向 struct node 结构变量的指针的指针B)NODE p ;语句出错C)p 是指向 struct node 结构变量的指针D)p 是 struct node 结构变量

题目

有以下程序段

typedef struct node { int data; struct node *next; } *NODE;

NODE p;

以下叙述正确的是

A)p 是指向 struct node 结构变量的指针的指针

B)NODE p ;语句出错

C)p 是指向 struct node 结构变量的指针

D)p 是 struct node 结构变量


相似考题
更多“有以下程序段typedef struct node { int data; struct node *next; } *NODE;NODE p;以下叙 ”相关问题
  • 第1题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    [说明]

    下面程序实现十进制向其它进制的转换。

    [C++程序]

    include"ioStream.h"

    include"math.h"

    include

    typedef struct node {

    int data;

    node*next;

    }Node;

    Class Transform.

    {

    DUDlic:

    void Trans(int d,int i); //d为数字;i为进制

    void print();

    private:

    Node*top;

    };

    void Transform.:Trans(int d,int i)

    {

    int m,n=0;

    Node*P;

    while(d>0)

    {

    (1);

    d=d/i;

    p=new Node;

    if(!n){

    p->data=m;

    (2);

    (3);

    n++;

    }

    else{

    p->data=m;

    (4);

    (5);

    }

    }

    }

    void Transform.:print()

    {

    Node*P;

    while(top!=NULL)

    {

    p=top;

    if(p->data>9)

    cout<<data+55;

    else

    cout<<data;

    top=p->next;

    delete p;

    }

    }


    正确答案:(1) m=d%i (2) top=p (3) top->next=NULL (4) p->next=top (5) top=p
    (1) m=d%i (2) top=p (3) top->next=NULL (4) p->next=top (5) top=p 解析:本题考查C++编程,主要考查了链表的使用。
    所有的问题只出在函数Trans中,它的功能是完成将十进制数d转换为任意进制i的数,并存在数组中。函数中首先定义了一个指向链表结点的指针,然后开始进行转换,进制转换应该是一个很常见的问题,就是不断的求模运算,所以(1)处应填入“m=d%i”。然后,我们要把求模的结果保存到链表结点中,并使链表首指针指向该结点,结点中指向下一个结点”的指针设为空,所以(2)处应填入“top=p”,(3)处应填入“top->next=NULL”。由于求模运算是从低位到高位逐位求出的,所以在我们在进行完第二次求模运算后,应该将第二次运算的结果放到链表首位,所以(4)处应填入“P->next=top”,(5)处应填入“top=p”。

  • 第2题:

    Simplify the following Boolean expression

    !((i ==12) || (j > 15))

    struct Node {

    int value;

    Node* next;

    };

    1.1 Get the value of the Nth node from last node in the linked list.

    PARAM HEAD: the first element in the linked list:

    PARAM n: the number of the node counted reversely

    RETURN: the value of the node, or -1 if not exists

    int GetValue(Node* HEAD, int n)

    {

    }

    1.2 Delete a node WITHOUT using the HEAD pointer.

    PARAM p: A pointer pointed to a node in the middle of the linked list.

    RETURN: void

    void Delete(Node* p)

    {

    }

    1.3 Insert a new node before p WITHOUT using the HEAD pointer

    PARAM p: A pointer pointed to a node in the middle of the linked list.

    PARAM value: new Node value

    RETURN: void

    void Insert(Node* p, int value)

    {

    }

    Question 2:

    Please write a String class with following features:


    正确答案:
     

  • 第3题:

    下而程序实现十进制向其他进制的转换。

    [C++程序]

    include"ioStream.h"

    include"math.h"

    include <conio.h>

    typedef struct node{

    int data;

    node *next;

    }Node;

    class Transform

    {

    public:

    void Trans(int d,int i); //d为数字;i为进制

    void print();

    private:

    Node *top;

    };

    void Transform.:Trans(int d,int i)

    {

    int m,n=0;

    Node *P;

    while(d>0)

    {

    (1) ;

    d=d/i;

    p=new Node;

    if(!n){

    P->data=m;

    (2) j

    (3) ;

    n++;

    }

    else{

    p->data=m;

    (4) ;

    (5) ;

    }

    }

    }

    void Transform.:print()

    {

    Node *P;

    while(top!=NULL)

    {

    p=top;

    if(P->data>9)

    cout<<data+55:

    else

    cout<<data;

    top=p->next;

    delete P;

    }

    }


    正确答案:(1)m=d%i (2) top=p (3) top->next=NULL (4) p->next=top (5) top=p
    (1)m=d%i (2) top=p (3) top->next=NULL (4) p->next=top (5) top=p 解析:本题考查C++编程,主要考查了链表的使用。
    所有的问题只出在函数Trans中,它的功能是完成将十进制数d转换为任意进制i的数,并存在数组中。函数中首先定义了一个指向链表节点的指针,然后开始进行转换,进制转换应该是一个很常见的问题,就是不断地求模运算,所以(1)处应填入“m=d%i”。然后,我们要把求模的结果保存到链表节点中,并使链表首指针指向该节点,节点中指向下一个节点的指针设为空,所以(2)处应填入top=p,(3)处应填入top->next=NULL。由于求模运算是从低位到高位逐位求出的,所以在进行完第二次求模运算后,应该将第二次运算的结果放到链表首位,所以(4)处应填入p->next=top,(5)处应填入top=p。

  • 第4题:

    阅读以下说明和c++代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:

    creatList(): 创建从小到大的有序链表。

    multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。

    print(): 打印链表。

    【C++代码】

    include <iostream>

    using namespace std;

    class List;

    class Node{

    friend class List;

    public:

    Node(int data){

    (1);

    }

    private:

    int data;

    Node *next;

    };

    class List{

    public:

    List(){list=NULL;}

    void multiplyList(List L1, List L2);

    void creatList();

    void print();

    private:

    Node *list;

    };

    void List::creatList()

    {

    Node *p, *u, *pre;

    int dara;

    list=NULL;

    wbile(1){

    cout<<"输入链表的一项: (小于零,结束链表) "<<endl;

    cin>>data;

    if(dara<0)break;//小于零,结束输入

    p=list;

    while(p !=NULL && dara>p->data){//查找插入点

    pre=p;

    p=p->next;

    }

    u=(2);

    if(p==list)list=u;

    else pre->next=u;

    (3);

    }

    }

    void List::multiplyList(List L1, List L2)

    {

    Node *pL1, *pL2, *pL, *u;

    list = NULL;

    pL1 = L1.list;

    pL2 = L2.11st;

    while(pL1 != NULL && pL2 != NULL){

    if(pL1->data < pL2->data){

    u = new Node(pL1->data);

    pL1 = pL1->next;

    }else{

    u = new Node(pL2->data);

    pL2 = pL2->next;

    }

    if(list == NULL){

    list =(4);

    }else{

    pL->next=u;

    pL=u;

    }

    }

    pL1 = (pL1 != NULL)? pL1:pL2;

    while(pL1 != NULL){

    u=(5);

    pL1 = pL1->next;

    if(list == NULL){

    list=pL=u;

    }else{

    pL->next=u;

    pL=u;

    }

    }

    }

    void List::print()

    {

    Node *p;

    p = list;

    while(p !=NULL){

    cout<<p->data<<"\t";

    p=p->next;

    &


    正确答案:(1) this->data=datanext=NULL (2) new Node(data) (3) u->next=p (4) pL=u (5) new Node(pL1->data)
    (1) this->data=data,next=NULL (2) new Node(data) (3) u->next=p (4) pL=u (5) new Node(pL1->data) 解析:空(1)是进行一些初始化工作,类Node有两个成员变量data和next,故空(1)应填“this->data =data,next=NULL;”。
    类List的createList方法中,通过while循环实现数据输入,为了升序存储链表,每读入一个数据,程序需要查找合适的插入点,亦通过一个while循环查找。因此空(2)是申请一个新的节点,应该调用Node的构造方法。故空(2)应填new Node(data),注意Node类的构造函数是有参数的。
    接着将节点u插入到链表中,当p为list,说明此时应将u插入到当前第一个节点前(亦即p节点之前),将list赋值为u,否则,应将u插入到pre节点之后,p节点之前,将pre的next修改为u。这样,还需将u的next指向其下一个节点,即p,故空(3)应填u->next=p。
    multiplyList负责将两个升序排列L1和L2的链表合并起来。通过while循环逐一比较,如果L1的当前节点的值大于L2的,则将L1的当前节点的值插入到结果链表list中,并将L1的当前节点指针下移,对L2同样处理。当list等于NULL时,因list初始化为NULL,则说明是结构链表的头节点。注意到else块中的pL变量的使用,可知pL变量是指向结构链表list的工作指针,故在结构链表生成第一节点时也需将其正确初始化。故空(4)应填pL=u。
    while循环结束直到链表L1和L2有一个已经到达链尾。接着将剩余链表的指针赋给批L1,将剩余节点逐次加入到结果链表即可。故易得空(5)应填new Node(pL1->data)。

  • 第5题:

    下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

    请改正程序指定部位的错误,使它能得到正确结果。

    [注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。

    [试题源程序]

    include<stdio.h>

    include<stdlib.h>

    typedef struct aa

    {

    int data;

    struct aa *next;

    }NODE;

    fun(NODE *h)

    {

    int max=-1;

    NODE *p;

    /***********found************/

    p=h;

    while(p)

    {

    if(p->data>max)

    max=p->data;

    /************found************/

    p=h->next;

    }

    return max;

    }

    outresult(int s, FILE *Pf)

    {

    fprintf(pf, "\nThe max in link: %d\n", s);

    }

    NODE *creatlink(int n, int m)

    {

    NODE *h, *p, *s, *q;

    int i, x;

    h=p=(NODE *)malloc(sizeof(NODE));

    h->data=9999;

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

    {

    s=(NODE *)malloc(sizeof(NODE));

    s->data=rand()%m; s->next=p->next;

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

    }

    p->next=NULL;

    return h;

    }

    outlink(NODE *h, FILE *pf)

    {

    NODE *p;

    p=h->next;

    fprintf(Pf, "\nTHE LIST:\n\n HEAD");

    while(P)

    {

    fprintf(pf, "->%d", P->datA); p=p->next;

    }

    fprintf(pf, "\n");

    }

    main()

    {

    NODE *head; int m;

    head=cteatlink(12,100);

    outlink(head, stdout);

    m=fun(head);

    printf("\nTHE RESULT"\n");

    outresult(m, stdout);

    }


    正确答案:(1)错误:p=h; 正确:p:h->next; (2)错误:p=h->next; 正确:p=p->next;
    (1)错误:p=h; 正确:p:h->next; (2)错误:p=h->next; 正确:p=p->next; 解析:程序中使用while循环语句并结合结构指针p来找到数据域中的最大值。
    错误1:P指向形参结构指针h的next指针,所以应改为:p=h->next;
    错误2:p指向自己的下一个结点,所以应改为:p=p->next

  • 第6题:

    设链表中的结点是NODE类型的结构体变量,且有NODE*p;为了申请一个新结点,并由p指向该结点,可用以下语句()。

    Ap=(NODE*)malloc(sizeof(p));

    Bp=(*NODE)malloc(sizeof(NODE));

    Cp=(NODE)malloc(sizeof(p));

    Dp=(NODE*)malloc(sizeof(NODE));


    D