一、尾插法
尾插法,注意p已经到最后了,不需要我们在next ,只需要改变他的下一个指向方向,然后修改下一个节点为Null。
二、头删法
头删除操作,需要判断是否为NULL;
三、尾删法
尾删其实就是要先判断我们删除的那个尾在哪里,实际上是在他的前一个结点的下一个结点,并且下一个节点为NULL的情况下,作为条件。然后我们将找到的倒数的第二个节点,找出之后,删除他的下一个节点,就是所谓的尾节点。最后删除完之后他就是最后一个节点,我们需要给其赋值为NULL。
上述讲的内容都是单向链表。
四、清空
上述用malloc 申请的空间都莫有释放,会造成内存泄漏
所以我们需要全部手动清除
头删效率比较高,在头就删除。
五、共用体
union 共用体(名字首字母大写)(联合)
{
};
在工用体内存空间中,他们占有共同的空间,彼此空间相互重叠,所以最后有效数字是最后一个。
可以这样想,数字,开关都可以控制灯泡,但是只能一个来控制,所以让其占有一段内存就可以。
他们的首地址都是同一个,所以开辟空间的时候都是往前堆。
因此可以通过这个方式也能来判断计算机的大小端。
共用体从c99后,共用体的变量可以作为函数的传参,一般也是作为指针传参。
考题一般这里爱考的是sizeof
结果是4,sizeof按照最大自节,但是还要按照两个字节对齐,因为short 比char大一点。
六、枚举
所有的可能性都举出来。(与整形兼容)
enum 名字(首字母大写)
{
里面写所有的可能性(并不是意味着他有七个成员,而是他的取值范围必须是里面的某一个)
};
提高代码的可读性,也可以放在switch语句,他是兼容的。
枚举值的后面的值可以发生改变。
枚举在后面的文件操作,会有用。在c里面,w = 100,在底层里面默认可以兼容,结果最后为100。
七、typedef 定义类型
对已有起别名
typedef int INT(从此以后INT不再是变量名而是类型名)。
位运算(所有位运算要操作数的类型是与整形或者整形兼容,或者枚举也可以;但是指针,结构体这些都不可以,不与整形兼容)
- 按位与是指定位清0
- i&=j <=>i = i&j
- 按位或| 指定位置1
- 按位异或^,指定位反转
- 取反 单目运算 对所有的数取反
- <<左移,左移之后,不够补0,可以实现某一位置1,i | (1<< 5)(左移永远都是左移)
- 右移>> 不够向右补0,右移分为算术右移(有符号,前面补1,也肯能补0;取决于i的正负,正补0,负的补1),逻辑右移(无符号 ,前面补0)
注意
在编程的时候注意给数据类型定义为无符号类型,使之符合我们的要求。
八、应用题
8.1 c语言循环左移
实现32位比特位,能被3整除的比特位,置1。