卜列描述中,正确的是()。
A. 线性链表是线性表的链式存储结构
B. 栈与队列是非线性结构
C. 双向链表是非线性结构
D. 只有根结点的二叉树是线性结构
● 下面关于栈和队列的叙述,错误的是 (60) 。
(60)
A. 栈和队列都是操作受限的线性表
B. 队列采用单循环链表存储时, 只需设置队尾指针就可使入队和出队操作的时间复杂度都为O(1)
C. 若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高
D. 利用两个栈可以模拟一个队列的操作,反之亦可
下列叙述中正确的是()。
A.有两个指针域的链表称为二叉链表
B.循环链表是循环队列的链式存储结构
C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表
D.结点中具有多个指针域的链表称为多重链表.
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下:
typedef struct node
{ datatypedata;
structnode *next;
} QNode; /*链队结点的类型*/
typedef struct
{ QNnode *front,*rear;
} LQueue; /*将头尾指针封装在一起的链队*/
以下这种链队的几个例子:
设q是一个指向链队的指针,即LQueue *q。下面各函数的功能说明如下:
(1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队;
(2) intEmpty_LQueue(LQueue *q):判断链队q是否空;
(3) void In_LQueue(LQueue *q, datatypex):将数据x压入链队q;
(4) int Out_LQueue(LQuere *q, datatype *x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。
[函数]
LQueae *Init_LQueue()
{ LQueue *q, *p;
q=malloc(sizeof(LQueue)); /*申请链队指针*/
P=malloc(sized(QNode));/*申请头尾指针结点*/
p->next=NULL;
(1)=p;
return q;
}
int Empty_LQueue(LQueue *q)
{ if(q->front (2) q>rear) return 0;
else return 1;
}
void In_LQueue(LQueue *q, datatype x)
{ QNoda *p;
p=malloc(sizeof(QNnode));/*申请新接点*/
p->data=x;
p->next=NULL;
(3)=p;
q->rear=p;
}
int Out_LQueue(LQueue *q, datatype *x)
{ QNnode *p;
if(Empty_LQueue(q)) return 0; /*队空,操作失败*/
else{
p=q->front->next;
*x=(4);
(5)=p->next;
free(p);
if (q->front->next= =NULL)q->rear=q->front;
return 1;
}
}
用单链表表示的链式队列,队头在链表的()位置。
A.链头
B.链尾
C.链中
D.可以由自己确定
动态存储分配可采用的分配方案是_______。
A.队式存储分配
B.栈式存储分配
C.线性存储分配
D.链式存储分配
栈和队列都是(2)。若进栈序列为1,2,3,4,则(3) 不可能是一个出栈序列。若进队列的序列为1,2,3,4,则(4)是一个进队列序列。
A.顺序存储的线性结构
B.链式存储的线性结构
C.限制存取点的线性结构
D.限制存取点的非线性结构
下列叙述中正确的是()。
A)线性链表是线性表的链式存储结构
B)栈与队列是非线性结构
C)双向链表是非线性结构
D)只有根结点的二叉树是线性结构
下列叙述中正确的是()。
A.线性链表是线性表的链式存储结构
B.栈与队列是非线性结构
C.双向链表是非线性结构
D.只有根结点的二叉树是线性结构