• linux下redis 安装


    --获取redis

    [redis@localhost ~]$ wget http://download.redis.io/releases/redis-2.8.7.tar.gz

    --2017-05-29 09:58:56--  http://download.redis.io/releases/redis-2.8.7.tar.gz

    正在解析主机 download.redis.io (download.redis.io)... 109.74.203.151

    正在连接 download.redis.io (download.redis.io)|109.74.203.151|:80... 已连接。

    已发出 HTTP 请求,正在等待回应... 200 OK

    长度:1064262 (1.0M) [application/x-gzip]

    正在保存至: “redis-2.8.7.tar.gz”

    100%[=====================================================================================================================================================>] 1,064,262    188KB/s 用时 13s   

    2017-05-29 09:59:10 (81.7 KB/s) - 已保存 “redis-2.8.7.tar.gz” [1064262/1064262])

    --解压

    [redis@localhost ~]$ tar -xzf redis-2.8.7.tar.gz

    [redis@localhost ~]$ ls

    redis-2.8.6  redis-2.8.6.tar.gz  redis-2.8.7  redis-2.8.7.tar.gz  test

    [redis@localhost ~]$ cd redis-2.8.7

    --编译

    [redis@localhost redis-2.8.7]$ make

    cd src && make all

    make[1]: 进入目录“/home/redis/redis-2.8.7/src”

    rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-dump redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html

    (cd ../deps && make distclean)

    make[2]: 进入目录“/home/redis/redis-2.8.7/deps”

    (cd hiredis && make clean) > /dev/null || true

    (cd linenoise && make clean) > /dev/null || true

    (cd lua && make clean) > /dev/null || true

    (cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true

    (rm -f .make-*)

    make[2]: 离开目录“/home/redis/redis-2.8.7/deps”

    (rm -f .make-*)

    echo STD=-std=c99 -pedantic >> .make-settings

    echo WARN=-Wall >> .make-settings

    echo OPT=-O2 >> .make-settings

    echo MALLOC=jemalloc >> .make-settings

    echo CFLAGS= >> .make-settings

    echo LDFLAGS= >> .make-settings

    echo REDIS_CFLAGS= >> .make-settings

    echo REDIS_LDFLAGS= >> .make-settings

    echo PREV_FINAL_CFLAGS=-std=c99 -pedantic -Wall -O2 -g -ggdb   -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -DUSE_JEMALLOC -I../deps/jemalloc/include >> .make-settings

    echo PREV_FINAL_LDFLAGS=  -g -ggdb -rdynamic >> .make-settings

    (cd ../deps && make hiredis linenoise lua jemalloc)

    make[2]: 进入目录“/home/redis/redis-2.8.7/deps”

    (cd hiredis && make clean) > /dev/null || true

    (cd linenoise && make clean) > /dev/null || true

    (cd lua && make clean) > /dev/null || true

    (cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true

    (rm -f .make-*)

    (echo "" > .make-cflags)

    (echo "" > .make-ldflags)

    MAKE hiredis

    cd hiredis && make static

    make[3]: 进入目录“/home/redis/redis-2.8.7/deps/hiredis”

    cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c

    cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  hiredis.c

    cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  sds.c

    cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  async.c

    ar rcs libhiredis.a net.o hiredis.o sds.o async.o

    make[3]: 离开目录“/home/redis/redis-2.8.7/deps/hiredis”

    MAKE linenoise

    cd linenoise && make

    make[3]: 进入目录“/home/redis/redis-2.8.7/deps/linenoise”

    cc  -Wall -Os -g  -c linenoise.c

    make[3]: 离开目录“/home/redis/redis-2.8.7/deps/linenoise”

    MAKE lua

    cd lua/src && make all CFLAGS="-O2 -Wall -DLUA_ANSI " MYLDFLAGS=""

    make[3]: 进入目录“/home/redis/redis-2.8.7/deps/lua/src”

    cc -O2 -Wall -DLUA_ANSI    -c -o lapi.o lapi.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lcode.o lcode.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ldebug.o ldebug.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ldo.o ldo.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ldump.o ldump.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lfunc.o lfunc.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lgc.o lgc.c

    cc -O2 -Wall -DLUA_ANSI    -c -o llex.o llex.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lmem.o lmem.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lobject.o lobject.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lopcodes.o lopcodes.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lparser.o lparser.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lstate.o lstate.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lstring.o lstring.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ltable.o ltable.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ltm.o ltm.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lundump.o lundump.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lvm.o lvm.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lzio.o lzio.c

    cc -O2 -Wall -DLUA_ANSI    -c -o strbuf.o strbuf.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lauxlib.o lauxlib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lbaselib.o lbaselib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ldblib.o ldblib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o liolib.o liolib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lmathlib.o lmathlib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o loslib.o loslib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o ltablib.o ltablib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lstrlib.o lstrlib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o loadlib.o loadlib.c

    cc -O2 -Wall -DLUA_ANSI    -c -o linit.o linit.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lua_cjson.o lua_cjson.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lua_struct.o lua_struct.c

    cc -O2 -Wall -DLUA_ANSI    -c -o lua_cmsgpack.o lua_cmsgpack.c

    lua_cmsgpack.c: 在函数‘table_is_an_array’中:

    lua_cmsgpack.c:370:21: 警告:变量‘max’被设定但未被使用 [-Wunused-but-set-variable]

         long count = 0, max = 0, idx = 0;

                         ^

    ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o strbuf.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o lua_cjson.o lua_struct.o lua_cmsgpack.o    # DLL needs all object files

    ranlib liblua.a

    cc -O2 -Wall -DLUA_ANSI    -c -o lua.o lua.c

    cc -o lua  lua.o liblua.a -lm

    liblua.a(loslib.o):在函数‘os_tmpname’中:

    loslib.c:(.text+0x28c): 警告:the use of `tmpnam' is dangerous, better use `mkstemp'

    cc -O2 -Wall -DLUA_ANSI    -c -o luac.o luac.c

    cc -O2 -Wall -DLUA_ANSI    -c -o print.o print.c

    cc -o luac  luac.o print.o liblua.a -lm

    make[3]: 离开目录“/home/redis/redis-2.8.7/deps/lua/src”

    MAKE jemalloc

    cd jemalloc && ./configure --with-jemalloc-prefix=je_ --enable-cc-silence CFLAGS="-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops " LDFLAGS=""

    checking for xsltproc... /usr/bin/xsltproc

    checking for gcc... gcc

    checking whether the C compiler works... yes

    checking for C compiler default output file name... a.out

    checking for suffix of executables...

    checking whether we are cross compiling... no

    checking for suffix of object files... o

    checking whether we are using the GNU C compiler... yes

    checking whether gcc accepts -g... yes

    checking for gcc option to accept ISO C89... none needed

    checking how to run the C preprocessor... gcc -E

    checking for grep that handles long lines and -e... /usr/bin/grep

    checking for egrep... /usr/bin/grep -E

    checking for ANSI C header files... yes

    checking for sys/types.h... yes

    checking for sys/stat.h... yes

    checking for stdlib.h... yes

    checking for string.h... yes

    checking for memory.h... yes

    checking for strings.h... yes

    checking for inttypes.h... yes

    checking for stdint.h... yes

    checking for unistd.h... yes

    checking size of void *... 8

    checking size of int... 4

    checking size of long... 8

    checking size of intmax_t... 8

    checking build system type... x86_64-unknown-linux-gnu

    checking host system type... x86_64-unknown-linux-gnu

    checking whether __asm__ syntax is compilable... yes

    checking whether __attribute__ syntax is compilable... yes

    checking whether compiler supports -fvisibility=hidden... yes

    checking whether compiler supports -Werror... yes

    checking whether tls_model attribute is compilable... no

    checking for a BSD-compatible install... /usr/bin/install -c

    checking for ranlib... ranlib

    checking for ar... /usr/bin/ar

    checking for ld... /usr/bin/ld

    checking for autoconf... no

    checking for memalign... yes

    checking for valloc... yes

    checking configured backtracing method... N/A

    checking for sbrk... yes

    checking whether utrace(2) is compilable... no

    checking whether valgrind is compilable... no

    checking STATIC_PAGE_SHIFT... 12

    checking pthread.h usability... yes

    checking pthread.h presence... yes

    checking for pthread.h... yes

    checking for pthread_create in -lpthread... yes

    checking for _malloc_thread_cleanup... no

    checking for _pthread_mutex_init_calloc_cb... no

    checking for TLS... yes

    checking whether a program using ffsl is compilable... yes

    checking whether atomic(9) is compilable... no

    checking whether Darwin OSAtomic*() is compilable... no

    checking whether to force 32-bit __sync_{add,sub}_and_fetch()... no

    checking whether to force 64-bit __sync_{add,sub}_and_fetch()... no

    checking whether Darwin OSSpin*() is compilable... no

    checking for stdbool.h that conforms to C99... yes

    checking for _Bool... yes

    configure: creating ./config.status

    config.status: creating Makefile

    config.status: creating doc/html.xsl

    config.status: creating doc/manpages.xsl

    config.status: creating doc/jemalloc.xml

    config.status: creating include/jemalloc/jemalloc.h

    config.status: creating include/jemalloc/internal/jemalloc_internal.h

    config.status: creating test/jemalloc_test.h

    config.status: creating config.stamp

    config.status: creating bin/jemalloc.sh

    config.status: creating include/jemalloc/jemalloc_defs.h

    config.status: executing include/jemalloc/internal/size_classes.h commands

    ===============================================================================

    jemalloc version   : 3.2.0-0-g87499f6748ebe4817571e817e9f680ccb5bf54a9

    library revision   : 1

    CC                 : gcc

    CPPFLAGS           :  -D_GNU_SOURCE -D_REENTRANT

    CFLAGS             : -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -fvisibility=hidden

    LDFLAGS            :

    LIBS               :  -lm -lpthread

    RPATH_EXTRA        :

    XSLTPROC           : /usr/bin/xsltproc

    XSLROOT            :

    PREFIX             : /usr/local

    BINDIR             : /usr/local/bin

    INCLUDEDIR         : /usr/local/include

    LIBDIR             : /usr/local/lib

    DATADIR            : /usr/local/share

    MANDIR             : /usr/local/share/man

    srcroot            :

    abs_srcroot        : /home/redis/redis-2.8.7/deps/jemalloc/

    objroot            :

    abs_objroot        : /home/redis/redis-2.8.7/deps/jemalloc/

    JEMALLOC_PREFIX    : je_

    JEMALLOC_PRIVATE_NAMESPACE

                       :

    install_suffix     :

    autogen            : 0

    experimental       : 1

    cc-silence         : 1

    debug              : 0

    stats              : 1

    prof               : 0

    prof-libunwind     : 0

    prof-libgcc        : 0

    prof-gcc           : 0

    tcache             : 1

    fill               : 1

    utrace             : 0

    valgrind           : 0

    xmalloc            : 0

    mremap             : 0

    munmap             : 0

    dss                : 0

    lazy_lock          : 0

    tls                : 1

    ===============================================================================

    cd jemalloc && make CFLAGS="-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops " LDFLAGS="" lib/libjemalloc.a

    make[3]: 进入目录“/home/redis/redis-2.8.7/deps/jemalloc”

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/jemalloc.o src/jemalloc.c

    src/jemalloc.c: 在函数‘je_realloc’中:

    src/jemalloc.c:1082:9: 警告:变量‘old_rzsize’被设定但未被使用 [-Wunused-but-set-variable]

      size_t old_rzsize JEMALLOC_CC_SILENCE_INIT(0);

             ^

    src/jemalloc.c: 在函数‘je_free’中:

    src/jemalloc.c:1230:10: 警告:变量‘rzsize’被设定但未被使用 [-Wunused-but-set-variable]

       size_t rzsize JEMALLOC_CC_SILENCE_INIT(0);

              ^

    src/jemalloc.c: 在函数‘je_rallocm’中:

    src/jemalloc.c:1477:9: 警告:变量‘old_rzsize’被设定但未被使用 [-Wunused-but-set-variable]

      size_t old_rzsize JEMALLOC_CC_SILENCE_INIT(0);

             ^

    src/jemalloc.c: 在函数‘je_dallocm’中:

    src/jemalloc.c:1622:9: 警告:变量‘rzsize’被设定但未被使用 [-Wunused-but-set-variable]

      size_t rzsize JEMALLOC_CC_SILENCE_INIT(0);

             ^

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/arena.o src/arena.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/atomic.o src/atomic.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/base.o src/base.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/bitmap.o src/bitmap.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk.o src/chunk.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk_dss.o src/chunk_dss.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk_mmap.o src/chunk_mmap.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/ckh.o src/ckh.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/ctl.o src/ctl.c

    src/ctl.c: 在函数‘epoch_ctl’中:

    src/ctl.c:1112:11: 警告:变量‘newval’被设定但未被使用 [-Wunused-but-set-variable]

      uint64_t newval;

               ^

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/extent.o src/extent.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/hash.o src/hash.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/huge.o src/huge.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/mb.o src/mb.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/mutex.o src/mutex.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/prof.o src/prof.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/quarantine.o src/quarantine.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/rtree.o src/rtree.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/stats.o src/stats.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tcache.o src/tcache.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/util.o src/util.c

    gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tsd.o src/tsd.c

    ar crus lib/libjemalloc.a src/jemalloc.o src/arena.o src/atomic.o src/base.o src/bitmap.o src/chunk.o src/chunk_dss.o src/chunk_mmap.o src/ckh.o src/ctl.o src/extent.o src/hash.o src/huge.o src/mb.o src/mutex.o src/prof.o src/quarantine.o src/rtree.o src/stats.o src/tcache.o src/util.o src/tsd.o

    make[3]: 离开目录“/home/redis/redis-2.8.7/deps/jemalloc”

    make[2]: 离开目录“/home/redis/redis-2.8.7/deps”

        CC adlist.o

        CC ae.o

        CC anet.o

        CC dict.o

        CC redis.o

        CC sds.o

        CC zmalloc.o

        CC lzf_c.o

        CC lzf_d.o

        CC pqsort.o

        CC zipmap.o

        CC sha1.o

        CC ziplist.o

        CC release.o

        CC networking.o

        CC util.o

        CC object.o

        CC db.o

        CC replication.o

        CC rdb.o

        CC t_string.o

        CC t_list.o

        CC t_set.o

        CC t_zset.o

        CC t_hash.o

        CC config.o

        CC aof.o

        CC pubsub.o

        CC multi.o

        CC debug.o

        CC sort.o

        CC intset.o

        CC syncio.o

        CC migrate.o

        CC endianconv.o

        CC slowlog.o

        CC scripting.o

        CC bio.o

        CC rio.o

        CC rand.o

        CC memtest.o

        CC crc64.o

        CC bitops.o

        CC sentinel.o

        CC notify.o

        CC setproctitle.o

        LINK redis-server

        INSTALL redis-sentinel

        CC redis-cli.o

        LINK redis-cli

        CC redis-benchmark.o

        LINK redis-benchmark

        CC redis-check-dump.o

        LINK redis-check-dump

        CC redis-check-aof.o

        LINK redis-check-aof

    Hint: To run 'make test' is a good idea ;)

    make[1]: 离开目录“/home/redis/redis-2.8.7/src”

    --make install会将redis的命令放到系统的path下  所以可以在任何位置直接执行redis-server和redis-cli

    [redis@localhost redis-2.8.7]$ make install

    cd src && make install

    make[1]: 进入目录“/home/redis/redis-2.8.7/src”

    Hint: To run 'make test' is a good idea ;)

        INSTALL install

    install: 无法创建普通文件"/usr/local/bin/redis-server": 权限不够

    make[1]: *** [install] 错误 1

    make[1]: 离开目录“/home/redis/redis-2.8.7/src”

    make: *** [install] 错误 2

    [redis@localhost redis-2.8.7]$ su root

    密码:

    [root@localhost redis-2.8.7]# make install

    cd src && make install

    make[1]: 进入目录“/home/redis/redis-2.8.7/src”

    Hint: To run 'make test' is a good idea ;)

        INSTALL install

        INSTALL install

        INSTALL install

        INSTALL install

        INSTALL install

    make[1]: 离开目录“/home/redis/redis-2.8.7/src”

    [root@localhost redis-2.8.7]# su redis

    --将redis的配置文件拷贝到etc下(不做这一步也可以 这样只是为了使用方便 )

    [redis@localhost redis-2.8.7]$ cp redis.conf /etc/redis.conf

    cp: 无法创建普通文件"/etc/redis.conf": 权限不够

    [redis@localhost redis-2.8.7]$ su root

    密码:

    [root@localhost redis-2.8.7]# cp redis.conf /etc/redis.conf

    [root@localhost redis-2.8.7]# cd /etc/redis.conf

    bash: cd: /etc/redis.conf: 不是目录

    [root@localhost redis-2.8.7]# cd /etc/

    --vi的过程打印不出来 我只是改了配置文件里的daemonize 默认是no 改为yes,这样修改之后,即使关闭了shell窗口,redis server也依然在后台运行。

    [root@localhost etc]# vi redis.conf

    [root@localhost etc]# su redis

    --启动redis 如果不加conf参数 会是默认的conf

    [redis@localhost etc]$ redis-server /etc/redis.conf

    --使用客户端进行操作 测试成功

    [redis@localhost etc]$ redis-cli

    127.0.0.1:6379> set foo bar

    OK

    127.0.0.1:6379> get foo

    "bar"

    --关闭redis(此处使用的是redis-cli进行的关闭操作)

    127.0.0.1:6379> shutdown

  • 相关阅读:
    关于题目中的内存限制
    手动实现最小堆和最大堆(优先队列)
    线性筛素数(欧拉筛)+前缀和优化
    并查集
    快速排序

    字典按中文姓名排序
    oc程序代码
    学生字典计算年龄差 随机50个数
    nsset
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/6928191.html
Copyright © 2020-2023  润新知