问答题

阅读下列说明和C函数,在(n)处填入适当的字句。
[说明]
已知集合A和B的元素分别用不含头节点的单链表存储,函数Difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A=5,10,20,15,25,30,集合B=5,15,35,25,如图8.13(a)所示,运算完成后的结果如图8.13(b)所示。

链表节点的结构类型定义如下。
typedef struct Node
ElemType elem;
struct Node *next;
NodeType;
[C函数]
void Difference(NodeType **LA, NodeType *LB)

NodeType *pa, *pb. *pre, *q;
pre=NULL;
(1) ;
while (pa)
pb=LB;
while ( (2) )
pb=pb->next;
if( (3) )
if (!pre)
*LA= (4) ;
else
(5) =pa->next;
q= pa;
pa= pa->next;
free (q) ;

else
(6) ;
pa = pa->nex七;

 

【参考答案】

(1) pa=*LA (2) pb&&pb->elem!=pa->elem (3) pb
(4) pa->ne......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
阅读下列说明和C代码,在(n)处填入适当的子句。 [说明] 栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stack Top),而另一端称为栈底(Stack Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否己满(IsFull)、获取栈顶数据(Top)、压栈 入栈(Push)、弹栈 出栈(Pop)。 当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储,如图8.14所示。 以下C代码采用链式存储结构实现一个整数栈操作。 [C代码] typedef struct List int data; 栈数据 struct List* next; 上次入栈的数据地址 List; typedef struct Stack List* pTop; 当前栈顶指针 Stack; Stack* NewStack()return(Stack*) calloc (1, sizeof( Stack)); int IsEmpty (Stack*s)( 判断栈s是否为空栈 If( (1) ) return 1; return 0; int Top (Stack*s) 获取栈顶数据。若栈为空,则返回机器可表示的最小整数 if(IsEmpty (S)) return INT_MIN; return (2) ; void Push(Stack* s, int theData) 将数据theData压栈 List* newNode; newNode= (List*) calloc (1, siz eof (List)); newNode->data=theData; newNode->next=S->pTop; S->pTop= (3) ; void Pop(Stack* s) 弹栈 List* lastTop; If (IsEmpty (S)) return; lastTop=S->pTop; S->pTop= (4) ; Free (lastTop) ; #define MD(a) a<<2 int main () int i; Stack* myStack; myStack=NewStack () ; Push (myStack,MD (1)) ; Push (myStack,MD (2)); Pop (myStack) ; Push (myStack,MD (3)+1) ; while (! IsEmpty (myStack)) printf ( %d ,Top (myStack)); Pop (myStack) ; return 0; 以上程序运行时的输出结果为 : (5) 。
问答题
阅读下列说明和C函数代码,在(n)处填入适当的字句。 [说明] 对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个节点,且每个节点仅访问一次的过程。函数InOrder()借助栈实现二叉树的非递归中序遍历运算。 设二叉树采用二叉链表存储,节点类型定义如下。 typedef struct BtNode ElemType data; *节点的数据域,ElemType的具体定义省略* struct BtNode *lchild,*rchild; *节点的左、右孩子指针域* BtNode, *BTree; 在函数InOrder()中,用栈暂存二叉树中各个节点的指针,并将栈表示为不含头节点的单向链表(简称链栈),其节点类型定义如下。 typedef struct StNode *链栈的节点类型* BTree elem; *栈中的元素是指向二叉链表节点的指针* struct StNode *link; StNode; 假设从栈顶到栈底的元素为en,ee-1,…,e1,则不含头节点的链栈示意图如图8.12所示。 [C函数] int InOrder(BTree root) *实现二叉树的非递归中序遍历 * Brrree ptr; *ptr用于指向二叉树中的节点 * StNode *q; *q暂存链栈中新创建或待删除的节点指针* StNode *stacktop=NULL; *初始化空栈的栈顶指针stacktop* ptr=root; *ptr指向二又树的根节点 * while ( (1) || stacktop!=NULL) while (ptr!=NULL) q= (StNode *)malloc(sizeof (StNode)); if (q==NULL) return-1; q->elem=ptr; (2) ; stacktop=q; *stacktop指向新的栈顶* ptr= (3) ; *进入左子树* q= stacktop; (4) ; *栈顶元素出栈* visit (q); *visit是访问节点的函数,其具体定义省略* ptr= (5) ; *进入右子树* free (q); *释放原栈顶元素的节点空间* return 0: *InOrder*