首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用排序链表的顺序搜索

使用排序链表的顺序搜索
EN

Stack Overflow用户
提问于 2010-05-16 21:57:42
回答 2查看 1.5K关注 0票数 2
代码语言:javascript
运行
复制
struct Record_node* Sequential_search(struct Record_node *List, int target) { 
    struct Record_node *cur;
    cur = List->head ;
    if(cur == NULL || cur->key >= target) {
        return NULL;
    }
    while(cur->next != NULL) {
        if(cur->next->key >= target) {
            return cur;
        }
        cur = cur->next;
    }
    return cur;
}

我不能解释这个伪代码。有人能给我解释一下这个程序是如何工作和流动的吗?给定这个在链表和升序列表中搜索值的伪代码,该程序将返回什么?

a.列表中小于target的最大值

b.列表中小于或等于target的最大值

c.列表中大于或等于target的最小值

d.目标

e.列表中大于target的最小值

假设列表是1,2,4,5,9,20,20,24,44,69,70,71,74,77,92和target 15,发生了多少次比较?(在这里,比较是指比较目标值)

编辑:@Stephen如果我问的问题太粗鲁了,我很抱歉。

因为我习惯于用Visual Basic编程,所以我把程序第4行中的“cur->key”理解为“cur大于或等于key”,但由于“+=”的意思是“前一个值加上后一个值等于后一个值”,我可以用和“+=”相同的方式解释“->”,这部分是我面临的问题之一。

我面临的第二个问题是在Record_node中使用指针(如果它是一个指针)。我甚至不确定我是否知道我不知道的东西!我把这个程序理解为某种递归算法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-16 22:23:07

因为我习惯于用Visual Basic编程,所以我把程序第4行中的“cur->key”理解为“cur大于或与key相同”,但由于“+=”的意思是“前一个值加上后一个值等于后一个值”,我可以用和“+=”相同的方式解释“->”,这部分是我面临的问题之一。

这就是问题所在,我很高兴您澄清了这一点:)

这段代码是用c (或c++)编写的。该语言使用->解除对指针的引用,并指向结构的成员。VB没有指针,所以你可能会说struct.membercur.next

代码语言:javascript
运行
复制
while (cur->next != NULL) {   // While current's next node isn't NULL.
}

NULL被用来表示列表的结尾。

计算cur->next->key意味着“当前节点之后的节点的关键字”。如果您绘制一个具有升序数值的链表并跟踪程序,它可能会帮助您可视化这一点。

在while循环执行过程中的某个时刻,您将拥有以下内容:

代码语言:javascript
运行
复制
+-+  +-+  +-+
|2|--|4|--|7|--NULL
+-+  +-+  +-+
 ^    ^    ^
 |    |    |
 head cur  cur->next

顺便说一句,真正大于或等于的运算符是>=

BTW2,它不是递归的。递归是一个调用自身的函数(你可以递归地实现它)。这个函数是迭代的(它使用循环)。递归算法的一个例子是:

代码语言:javascript
运行
复制
node* Sequential_search(List *list, int target) {
  if (!list) return NULL;
  if (target == list->key) return list;
  return Sequential_search(list->next, target);
}

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2010-05-16 22:29:53

你可能会发现它对review a list of C operators and their precedence很有帮助,尤其是来自VB。我为你的勇敢而鼓掌,因为你首先进入了一个链接列表..但在开始list实现之前,您可能希望花一些时间了解指针的基础知识。

这是对Stephen's great answer的补充,我已经向上投票了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2844008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档