Есть ли какие-либо библиотеки C с открытым исходным кодом со структурами общих данных? [закрытый]

Ниже приведен простой пример того, как извлечь ZIP-файл, вам нужно проверить, является ли файл каталогом. Но это самое простое.

Недопустимый шаг: чтение входного потока и запись содержимого в буфер, который записывается в выходной поток.

// Expands the zip file passed as argument 1, into the
// directory provided in argument 2
public static void main(String args[]) throws Exception
{
    if(args.length != 2)
    {
        System.err.println("zipreader zipfile outputdir");
        return;
    }

    // create a buffer to improve copy performance later.
    byte[] buffer = new byte[2048];

    // open the zip file stream
    InputStream theFile = new FileInputStream(args[0]);
    ZipInputStream stream = new ZipInputStream(theFile);
    String outdir = args[1];

    try
    {

        // now iterate through each item in the stream. The get next
        // entry call will return a ZipEntry for each file in the
        // stream
        ZipEntry entry;
        while((entry = stream.getNextEntry())!=null)
        {
            String s = String.format("Entry: %s len %d added %TD",
                            entry.getName(), entry.getSize(),
                            new Date(entry.getTime()));
            System.out.println(s);

            // Once we get the entry from the stream, the stream is
            // positioned read to read the raw data, and we keep
            // reading until read returns 0 or less.
            String outpath = outdir + "/" + entry.getName();
            FileOutputStream output = null;
            try
            {
                output = new FileOutputStream(outpath);
                int len = 0;
                while ((len = stream.read(buffer)) > 0)
                {
                    output.write(buffer, 0, len);
                }
            }
            finally
            {
                // we must always close the output file
                if(output!=null) output.close();
            }
        }
    }
    finally
    {
        // we must always close the zip file.
        stream.close();
    }
}

Выдержка кода получена из следующего сайта:

http://www.thecoderscorner.com/team-blog/java-and-jvm/12-reading-a-zip-file-from-java-using-zipinputstream#.U4RAxYamixR

104
задан Vasil 21 March 2009 в 01:26
поделиться

5 ответов

Gnome обеспечивает превосходную библиотеку для этого, названного Бойкий , со многими полезными структурами данных и другими утилитами также.

37
ответ дан u0b34a0f6ae 5 November 2019 в 11:11
поделиться

gnulib, библиотека мобильности гну.

Это распределяется как исходный код. Этот список от список модулей , который включает ТОННУ других вещей. Один интересный является "c-стеком: обработка Переполнения стека, вызывая выход программы".

  • список
  • carray-список списка массива
  • связанный список
  • avltree-список
  • rbtree-список
  • linkedhash-список
  • avltreehash-список
  • rbtreehash-список
  • подсписок (Последовательный тип данных списка, поддержанный другим списком.)
  • oset (Абстрактное упорядоченное множество.)
  • массив-oset
  • avltree-oset
  • rbtree-oset
29
ответ дан Ian Kelling 5 November 2019 в 11:11
поделиться

BSD queue.h имеет:

  • SLIST = отдельно связанный список
  • СПИСОК = двунаправленный связанный список
  • SIMPLEQ = отдельно связанная очередь
  • TAILQ = вдвойне связанная очередь

BSD tree.h имеет:

  • RB - красно-черное дерево
  • ОТКОС - вывихивает дерево

, Посмотрите очередь (3) и дерево (3) страницы справочника для деталей. Мне действительно нравятся они, потому что они - чистые макросы C без зависимостей (даже libc). Плюс с лицензией BSD Вы не должны волноваться ни о каких ограничениях компании w/GPL.

54
ответ дан cnst 5 November 2019 в 11:11
поделиться

SGLIB является превосходной универсальной библиотекой структур данных. Библиотека в настоящее время обеспечивает универсальные реализации для:
массивы сортировки
связанные списки
отсортированные связанные списки
двойные связанные списки
красно-черные деревья
хешированные контейнеры

Это очень быстро, быстрее, чем бойкий. Это вдохновлено Стандартной библиотекой шаблонов. Загрузка Здесь

Другое решение программное обеспечение Attractive Chaos . C библиотека макросов:
kbtree.h: эффективная библиотека B-дерева в C.
khash.h: быстро и взвешенная светом библиотека хэш-таблицы в C.
kvec.h: контейнер простого вектора в C.

программное обеспечение Sglib и Attractive Chaos библиотека макросов C. Используя пустоту* для реализации универсальных контейнеров в C может быть неэффективным. C макросы подражает шаблону C++ и так же эффективны как шаблон C++

19
ответ дан Caleb Hattingh 5 November 2019 в 11:11
поделиться
-2
ответ дан Robert Harvey 5 November 2019 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: