【单选题】
两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前驱的条件是( )。
【单选题】
若有以下定义:structnode{intdata;structnode*next;}structnode*p;已建立如下图所示的链表:┌──┬──┐┌──┬──┐┌──┬──┐p→│data│next┼→│data│next┼→...→│data│NULL│└──┴──┘└──┴──┘└──┴──┘指针p指向第一个结点,能输出链表所有结点的数据成员data的循环语句是()。
①
while(p!=NULL){printf("%d,",p-p++;}
②
while(p){printf("%d,",p.data);p=p-}
③
for(;p!=NULL;p++)printf("%d,",p
④
-for(;p;p=p-next)printf("%d,",(*p).data);
【单选题】
在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是( )。
①
p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;
②
s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;
③
p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;
④
s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
【判断题】
设有一个带头结点的,头指针为head的单向链表,p指向表中某一个结点,且有p-next= L,现要删除头结点,并使该单向链表构造成单向循环链表,通过操作head=head- p-next= head;。
【单选题】
若有定义:structnode{intdata;structnode*next;};已建立如下图所示的链表:┌─┬─┐┌─┬─┐┌─┬─┐head→│2│┼→│4│┼→…→│28│┼→NULL└─┴─┘└─┴─┘└─┴─┘指针head指向链表首结点,以下函数的功能是()。voidfun(structnode*head){structnode*p=head;while(1){p=p-printf("%d",p-data);if(!p)break;}}
【判断题】
设链表中的结点是NODE类型的结构体变量,且有NODE *p;为了申请一个新结点,并由p指向该结点,可用以下语句p=(*NODE)malloc(sizeof(NODE));
【单选题】
对一个栈顶指针为top的链栈进行进栈操作,设P为指向待进栈的结点的指针,把e的值赋值给该结点的数据域,然后使该结点进栈,则执行( )。
①
A.p-data=e; p=top- top=topànext;
②
B.p-data=e;p-next=top;top=p;
④
D.p-data=e;p-next=top- top =p;
【单选题】
在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句( )。
【单选题】
假定p为指向二维数组int d[4][6]的指针,则p的类型为( )。
【判断题】
设有一个带头结点的链队列,队列中每个结点由一个数据域data和指针域next组成,front和rear分别为链队列的头指针和尾指针。设p指向要入队的新结点(该结点已被赋值),则入队操作为rear-next=p; p = rear;