Как мне написать этот код C ++ в C. Итерация связанного списка? - PullRequest
0 голосов
/ 09 мая 2020
// Recur for all the vertices adjacent to current vertex
list<int>::iterator i;
for (i = adj[src].begin(); i != adj[src].end(); ++i)
    if (!visited[*i])
        // Do Something

Как мне написать этот код в C? Я пробовал следующее, это правильно?

while (graph->adjLists[src]->next != NULL)
{
    int i = graph->adjLists[src]->vertex;
    if (!visited[i])
    {
        // Do Something
    }
    graph->adjLists[src] = graph->adjLists[src]->next;

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Просто сравнив их, вы увидите, что они не одно и то же. Посмотрите, например, на роль переменной i. Вероятно, что-то вроде этого, используя указатель вместо итератора

XXXX* i = graph->adjLists[src];
while (i != NULL)
{
    if (!visited[i->vertex])
    {
        // Do Something
    }
    i = i->next;

Из опубликованного вами кода я не могу сказать, каким XXXX должно быть, но, надеюсь, вы сможете это понять вых.

0 голосов
/ 09 мая 2020

Близко, но нет, это не так. Это должно было бы выглядеть примерно так:

node *current = graph->adjLists[src]; // start at the head of the list
while (current != NULL)
{
    if (!visited[current->vertex])
    {
        // Do Something
    }
    current = current->next;
}

Очевидно, замена node любым реальным типом узлов вашего списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...