网友您好, 请在下方输入框内输入要搜索的题目:
题目内容
(请给出正确答案)
编写算法,借助栈将一个带都节点的单链表逆置。
参考答案和解析
void invert(linklist *L){ linklist *p=L->next,*s;// p为工作指针,指向当前元素,s为p的后继指针 L->next=null;//头结点摘下,指针域置空。算法中头指针L始终不变 while (p!=NULL) {s=p->next; // 保留后继结点的指针 p->next=L->next; // 逆置 L->next=p; p=s; // 将p指向下个待逆置结点 }}
更多 “编写算法,借助栈将一个带都节点的单链表逆置。” 相关考题
考题
● 栈是一种按“后进先出”原则进行插入和删除操作的数据结构,因此, (9) 必须用栈。(9)A. 函数或过程进行递归调用及返回处理B. 将一个元素序列进行逆置C. 链表结点的申请和释放D. 可执行程序的装入和卸载
考题
● 栈是一种按“后进先出”原则进行插入和删除操作的数据结构,因此, (60) 必须用栈。(60)A. 实现函数或过程的递归调用及返回处理时B. 将一个元素序列进行逆置C. 链表结点的申请和释放D. 可执行程序的装入和卸载
考题
下列关于链表结构的叙述正确的是( )A.线性链表、带链的栈和带链的队列的结点的结构都是相同的B.双向链表也就是循环链表C.线性链表与带链的栈的结点的结构是不同的D.在循环链表中通过任意一个结点可以找到链表中其他所有的结点,而在双向链表中做不到这一点
考题
有n个节点的单链表中,算法的时间复杂度是O(1)的操作是()
A、访问第i个节点(1≤i≤n)B、在第i个节点后插入一个新节点(1≤i≤n)C、访问值为x的节点D、将n个节点从小到大排序
考题
阅读下列说明和C程序,将应填入(n)处的字句写在对应栏中。[说明]借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。函数中使用的预定义符号如下:typedef struct BiTNode{int data;struct BiTNode *iChiid,*rChiid;} BiTNode,*BiTree;typedef struct SNode{/*链栈的节点类型*/BiTree elem;struct SNode *next;}SNode;[函数]int InOrderTraverse(BiTree root){BiTree P;SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/P=root;while(p !=NULL || stop !=NULL){if( (1) ){ /*不是空树*/q=(SNode*)malloc(sizeof q);if(q==NULL)return-1;/*根节点指针入栈*/(2);q->elem=P;stop=q;P=(3); /*进入根的左子树*/}else{q=stop;(4); /*栈顶元素出栈*/printf("%d|,q->elem->data); /*防问根节点*/P=(5); /*进入根的右子树*/free(q); /*释放原栈顶元素*/}/*if*/}/*while*/return 0;}/*InOrderTraverse*/(1)
考题
栈是一种按“后进先出”原则进行插入和删除操作的数据结构,因此, (9) 必须用栈。A.函数或过程进行递归调用及返回处理B.将一个元素序列进行逆置C.链表结点的申请和释放D.可执行程序的装入和卸载
考题
阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
函数ReverseList(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。
例如,某单链表如图1所示,逆置过程中指针s的变化情况如图2所示。
链表结点类型定义如下:
typedef struct Node{ int data; Struct Node *next; }Node,*LinkList; [C函数] void ReverseList(LinkList headptr) { //含头结点的单链表就地逆置,headptr为头指针 LinkList p,s; if(______) return; //空链表(仅有头结点)时无需处理 P=______; //令P指向第一个元素结点 if(!P->next) return; //链表中仅有一个元素结点时无需处理 s=p->next; //s指向第二个元素结点 ______ =NULL; //设置第一个元素结点的指针域为空 while(s){ p=s; //令p指向未处理链表的第一个结点 s= ______; p->next=headptr->next; //将p所指结点插入已完成部分的表头 headptr->next= ______; } }
考题
栈的特点是后进先出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则( )。A.入栈和出栈操作都不需要遍历链表
B.入栈和出栈操作都需要遍历链表
C.入栈操作需要遍历链表而出栈操作不需要
D.入栈操作不需要遍历链表而出栈操作需要
考题
填空题已知Q是一个非空队列,S是一个空栈。编写算法,仅用队列和栈的ADT函数和少量工作变量,将队列Q的所有元素逆置。栈的ADT函数有:voidmakeEmpty(SqStacks);置空栈voidpush(SqStacks,ElemTypee);元素e入栈ElemTypepop(SqStacks);出栈,返回栈顶元素intisEmpty(SqStacks);判断栈空队列的ADT函数有:voidenQueue(Queueq,ElemTypee);元素e入队ElemTypedeQueue(Queueq);出队,返回队头元素intisEmpty(Queueq);判断队空
考题
问答题编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。
热门标签
最新试卷
![瑞牛题库 章节练习 历年真题 模拟试卷](http://assets.51tk.com/51_sidebar_right_index.jpg)