From f80d0522770662082836dbe868e8dd6f546eaadf Mon Sep 17 00:00:00 2001 From: lzy Date: Thu, 18 Apr 2024 02:19:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter11/数据结构.md | 88 +++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/Chapter11/数据结构.md b/Chapter11/数据结构.md index a9481f6..acc8303 100644 --- a/Chapter11/数据结构.md +++ b/Chapter11/数据结构.md @@ -6,7 +6,7 @@ - 线性表 - - 顺序存储 --> arr + - 顺序存储 --> `arr` - 链式存储 --> 指针 (有头,无头) @@ -32,16 +32,22 @@ - 栈 - 队列 - -练习: -1. 表达式计算 -2. 球钟算法 - 三个栈,1h,5min,1min。27个球,过了多久队列里又是1到27的顺序。 + + 练习: + + 1. 表达式计算 + + 2. 球钟算法 + 三个栈,1h,5min,1min。27个球,过了多久队列里又是1到27的顺序。 + + - 树状(1:N) **递归**。**递归**转**非递归**。 + + - 图(N:M) @@ -52,32 +58,28 @@ - 私家车,可以不在标准的位置下。 - 编译时引入,代码膨胀但是不影响运行时间。 - 动态库(共享库): - - 只能在指定的路径。 + - 公交车,只能在指定的路径。 - 运行时引入,占用运行时间。 ### 静态库 -`libxx.a` -xx 指代库名 - -`ar -cr libxx.a yyy.o` +1. `libxx.a` + xx 指代库名 +2. `ar -cr libxx.a yyy.o` +3. 发布到 + `/usr/local/include` + `/usr/local/lib` +4. `gcc -L/usr/local/lib -o main main.o -lxx` + 如果路径都是这个默认的,可省略。 + `-l`参数必须在最后,有依赖 +5. `ldd -print shared libirary dependencies` + 打印所用到的动态库的内容 -发布到 -`/usr/local/include` -`/usr/local/lib` -`gcc -L/usr/local/lib -o main main.o -lxx` -如果路径都是这个默认的,可省略。 -`-l`参数必须在最后,有依赖 - -`ldd -print shared libirary dependencies` -打印所用到的动态库的内容 - - -以链式双向链表的`lib2`为例。 +#### 以链式双向链表的`lib2`为例。 ```bash *[main][~/workspace/Linux-C-Notes/Chapter11/ds/line/list/linklist/double/lib2]$ ldd ./main @@ -118,30 +120,31 @@ xx 指代库名 这时`main.c`路径下都不需要`llist.c`和`llist.h`了,`#include`时也从`"llist.h"`变为``。 + ### 动态库 -`libxx.so` -xx为库名 +1. `libxx.so` + xx为库名 +2. `gcc -shared -fpic -o libxx.so yyy.c` +3. 发布到 + `/usr/local/include` + `/usr/local/lib` +4. 在`/etc/ld.so.conf`中添加路径 +5. `/sbin/ldconfig` 重读`/etc/ld.so.conf`` +6. ``gcc -I/usr/local/include -L/usr/local/lib -o ... -lxx` + 如果路径都是这个默认的,可省略。 +7. 非root用户发布,可以自己定义一个位置,例如`~/lib` -`gcc -shared -fpic -o libxx.so yyy.c` - -发布到 -`/usr/local/include` -`/usr/local/lib` - -在`/etc/ld.so.conf`中添加路径 -`/sbin/ldconfig` 重读`/etc/ld.so.conf` - -`gcc -I/usr/local/include -L/usr/local/lib -o ... -lxx` -如果路径都是这个默认的,可省略。 - -非root用户发布,可以自己定义一个位置,例如`~/lib` ```bash cp xx.co ~/lib export LD_LIBRARY_PATH= ~/lib ``` + +#### 还是以`lib2`为例。 + + ```bash *[main][~/workspace/Linux-C-Notes/Chapter11/ds/line/list/linklist/double/lib2]$ ls  llist.c  llist.h  main  main.c  Makefile @@ -176,9 +179,14 @@ export LD_LIBRARY_PATH= ~/lib /lib64/ld-linux-x86-64.so.2 (0x00007fda7403a000) ``` -当动态库和静态库重名,会优先链接**静态库**。 +> [!NOTE] +> +> 当动态库和静态库重名,会优先链接**静态库**。 + + + +#### 以链式存储栈为例,`libstack`依赖`libllist`。 -以链式存储栈为例,`libstack`依赖`libllist`。 ```bash *[main][~/workspace/Linux-C-Notes/Chapter11/ds/line/stack/list]$ ls  llist.c  main  Makefile  stack.o