Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Обяснение на код

Featured Replies

Здравейте, имам следният код някой ще може ли да ми го обясни.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct element {
    int val;
    element* next;   
};

struct list {
    element* start;
};

list* init() {
    list* l = (list*)malloc(sizeof(list));
    l->start = nullptr;
    return l;
}

bool is_empty(list* l) {
    return (l->start == nullptr);
}

bool in_list(list* l, int v) {
    if(l->start == nullptr)
        return 0;

    element* iter = l->start;
    while(iter != nullptr) {
        if(iter->val == v) 
            return 1;
        iter = iter->next;
    }
    return 0;
}

void push_front(list* l, int v) {
    element* e = (element*)malloc(sizeof(element));
    e->val = v;
    e->next = l->start;
    l->start = e;
}

int pop_front(list* l) {
    int v = l->start->val;
    element* e = l->start;
    l->start = e->next;

    free(e);
    return v;
}

void push_back(list* l, int v) {
    element* iter = l->start;
    if(iter == nullptr)
        return push_front(l, v);

    while(iter->next != nullptr)
        iter = iter->next;

    element* e = (element*)malloc(sizeof(element));
    e->val = v;
    e->next = nullptr;
    iter->next = e;
}

int pop_back(list* l) {
    element* iter = l->start;

    if(iter->next == nullptr)
        return pop_front(l);

    while(iter->next->next != nullptr)
        iter = iter->next;

    int v = iter->next->val;
    element* e = iter->next;
    iter->next = nullptr;

    free(e);
    return v;
}

int count(list* l, int v) {
    int count = 0;
    element* iter = l->start;
    while(iter != nullptr) {
        if(iter->val == v)
            count++;
        iter = iter->next;
    }
    return count;
}

int most_freq(list* l) {
    list* uniques = init();

    element* iter = l->start;
    while(iter != nullptr) {
        int v = iter->val;
        if(!in_list(uniques, v)) {
            int curr_count = count(l, v);
            if(!is_empty(uniques) && curr_count > count(l, uniques->start->val))
                push_front(uniques, v);
            else
                push_back(uniques, v);
            // printf("%d has %d occurrences\n", v, curr_count);
        }
        iter = iter->next;
    }

    return uniques->start->val;
}

int main(int argc, char** argv) {
    srand(time(NULL));

    list* l = init();
    for(int i = 0; i < 30; i++) {
        push_back(l, ((rand() % 10) + 1));
    }

    printf("Most occurrences: %d\n", most_freq(l));

    printf("List: ");
    while(!is_empty(l)) {
        printf("%d ", pop_back(l));
    }

    printf("\n"); system("pause");
    return EXIT_SUCCESS;
}

 

Накратко това е реализация на свързан списък (linked list). Повече информация (на анлгийски език) можеш да прочетеш тук:

http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-C-C

Разбира се можеш да потърсиш още информация по въпроса.

При стартирането на програмата се запълва с 30 произволни числа, после се проверява кое число се среща най-често в списъка и накрая извежда списъка.

Не съм прочел кода в детайли, но в общи линий това прави.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.