空链表
操作:
1.创建空链表
2.头插
3.尾插
4.链表遍历
5.链表的长度
删除:
void popFront(struct Node *head)
{
//1.p指针变量 指向首节点
//2.断开链表
head->next = p->next;
//3.释放p所在的节点
free(p);
}
--------------------------------------
void void popBack(struct Node *head)
{
//1.p定位到尾节点的前一个节点
while (p->next->next != NULL)
{
p = p->next;
}
//2.释放 p->next
//3.p所在节点成为了新的尾节点
p->next = NULL;
}
位运算
0 1
计算机
1Byte --存储单位
1Byte = 8bits
软件控制硬件
编程 -->CPU-->寄存器(位)--硬件关联
C语言上 位运算
&
运算规则:一假则假 --- 清0
int a = 0x33;
a & 0x55;
0011 0011
0101 0101 &
----------
0001 0001 //0x11
unsigned char reg = 0xff;
//3 6 位清 0
//第3位 清0
//7654 3210
1111 1111
1011 0111 & ~(1<<3)
---------
1011 0111 //0xB7
0000 0001 //1
0000 1000
|
运算规则:一真则真
int a = 0x33;
a |0x55;
0011 0011
0101 0101 |
----------
0111 0111 //0x77
~
运算规则: 真假相对
int a = 0x33;
a |0x55;
0011 0011 ~
----------
1100 1100 //0xcc
^ 异或:
运算规则:
相同为0 不同为1
//同假异真
int a = 0x33;
a ^ 0x55;
0011 0011
0101 0101 ^
----------
0110 0110 //0x66
<<
数值<<位数
int a = 0x33;
a<<1
0110 0110
6 6 //左移一位相当于乘以2
>>
练习:
int a = 0xffffffff;
编写程序,让所有的偶数位 清0
0
1111
1010
a
置1 操作 --- 或运算
int a = 0x55;
0101 0101
0000 1000
-----------
0101 1101 //0x5D
a = a | 1<<3;
练习:
3210
int a = 0x55555555; //0101
所有奇数位置1
异或运算:
加密
0x55
0x33
0101 0101
0011 0011 (0x33)
---------
0110 0110 //0x66
0011 0011
----------
0101 0101 //0x55
1
0
-
1
1
-
0
----------------
>> 右移
注意:
看数据类型
有符号类型的数据,此时右移 最高位 补符号位 //算术右移
无符号类型的数据,此时右移 最高位 补0 //逻辑右移