嵌入式开发学习日志(数据结构--单链表)Day20
一、gdb调试
(一)一般调试步骤与命令
1、gcc -g (调试版本,内含调试信息与源码;eg:gcc -g main.c linklist.c)
2、gdb a.out(调试可执行文件,eg:gdb ./a.out)
3、b fun.c:36 设置断点,运行到这个位置,程序自动暂停
(b :100 默认停在main.c的100行;
b fun.c : 36 停在fun.c的36行
b 函数名 eg: b InserPosLinkList)
4、 r 运行(出现页面要输入则输入)
5、n 执行下一步 步过(如果是函数,直接调用结束)
s 步入自定义函数(系统函数不入)
6、使用p命令,查看变量或指针等数据
(p 变量:显示变量值,eg:p len
p 指针:看地址,eg:p *data)
7、q命令 退出(y)
(二)找段错误(无下断点的地方)
1、gcc -g (加上调试选项-g,eg:gcc main.c linklist.c -g)
2、gdb a.out (调试可执行文件,eg:gdb ./a.out)
3、按 r(run) 直接开始运行
4、重现错误
5、where 找出段错误的位置(出现栈结构信息,从下往上看,找到第一个不是自己写的往后退一个)
eg:#0(第一个不是自己写的,往后退一个)
#1(此处出现段错误)
#2
二、链表的一般操作
1、修改链表中的元素
2、 查找中间值
.3、查找倒数第k个元素;
4、逆序输出
5、尾插入
6、 指定插入
7、销毁链表·
三、顺序表和链表 优缺点
1、存储方式:
顺序表是一段连续的存储单元
链表是逻辑结构连续物理结构(在内存中的表现形式)不连续
2、时间性能
查找 顺序表O(1)
链表 O(n)
插入和删除
顺序表 O(n)
链表 O(1)
3、空间性能
顺序表 需要预先分配空间,大小固定
链表, 不需要预先分配,大小可变,动态分配 数据 + 指针域
4、循环列表
简单的来说,就是将原来单链表中最有一个元素的next指针指向第一个元素或头结
点,链表就成了一个环,头尾相连,就成了循环链表。circultlar linker list.
注意非空表,和空表。多数会加入头结点。
原来结束的条件是 p->next != NULL ------->>>>> p-next != Head