有单链表的结构体定义如下,设计算法求单链表中元素的值在50-100之间的数据元素的个数。 typedef struct Node{ /* 定义单链表结点类型 */ int data; Node *next; }Node,*LinkList; int count(LinkList L){ int count=0; LinkList p; //填写代码
时间: 2023-06-02 15:05:30 浏览: 88
Node *p = L->next; //p指向第一个结点
while(p){ //遍历单链表
if(p->data >= 50 && p->data <= 100){ //判断元素是否在指定范围内
count++; //计数器加1
}
p = p->next; //指向下一个结点
}
return count; //返回符合条件的元素个数
相关问题
假设二叉树采用二叉链存储结构存储,设计一个算法SonNodes,求出一棵给定二叉树的所有非叶子结点的个数 已知二叉树结构体声明如下: typedef struct node{ ElemType data; struct node *lchild; struct node *rchild; } BTNode; 根据上述要求完成算法中的代码,并将完整代码写在答题框内(二叉树结构体声明无需写到答题框) int SonNodes(BTNode *b){ //补充算法中的代码 }
下面是算法SonNodes的代码实现:
```
int SonNodes(BTNode *b){
if(b == NULL || (b->lchild == NULL && b->rchild == NULL)){ //递归结束条件
return 0;
}
else{
return SonNodes(b->lchild) + SonNodes(b->rchild) + 1; //递归调用
}
}
```
算法思路:
1. 如果当前节点为空或者是叶子节点(即左右子树都为空),那么返回0,表示当前节点不是非叶子节点。
2. 如果当前节点不是叶子节点,那么就递归求解左子树和右子树的非叶子节点个数,并将它们的和加1,表示当前节点也是一个非叶子节点。
3. 最终返回的结果就是整棵二叉树的非叶子节点个数。
算法时间复杂度为O(n),其中n为二叉树的节点个数。
typedef struct head//头节点类型声明 { int num; struct Node*first; struct Node*last; }head; typedef int ElemType; typedef struct Node//数据节点类型声明 { ElemType data; struct Node*next; }Node;
这段代码是关于链表的实现。其中头节点类型为 head,包含一个整数 num 表示链表中数据节点的个数,以及指向第一个节点和最后一个节点的指针。数据节点类型为 Node,包含一个 ElemType 类型的数据和指向下一个节点的指针。这里的 ElemType 可以根据实际需求定义为任何类型。
这段代码中的链表是单向链表,每个节点只保存了指向下一个节点的指针,无法回溯到前一个节点。如果需要双向链表,可以在 Node 结构体中增加一个指向前一个节点的指针。
阅读全文