链表的删除和预处理

创建空链表:
struct  Node head  -  -  -   创建了头链表,内部不储存数据,地址为null,空间开在栈上(在main函数里创建新的节点,一般都开在堆上)。
函数不能返回局部变量的地址,因为局部变量的空间开在栈上,在函数运行完之后,空间销毁,所以只能返回一个值,不能是地址。

链表操作的复习:
1.创建空链表
2.插入链表  头插入/尾节点
3.链表的遍历
4.链表的长度
头删:
free():释放掉malloc开出的空间,注意free不是将空间清零,而是将空间的使用权交给操作系统自由分配。
具体思路

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-->寄存器(位)--硬件关联 
 

&  : 一假则假
      eg: int a = 0x33;     a&0x55。      转为二进制分别为: 0011 0011 ; 0101 0101(一假则假)
              得出:0001 0001 //x011

 | :一真则真

~ ; 按位取反

^ 异或:相同为0;不同为一//同假真异

<< 左移:  数值<<位数
            eg:a<<1 :    0010 0011    ---->    0100 0110(左移一位,对于十进制x10,对于16进制x2)
若是将a(0xff):1111 1111 第三位清零(从右往左,从0位开始)-----   a &  ~(1<<3)

>> 右移:数值>>位数
     注意:看数据类型: 有符号位,右移 最高位补符号位
                                  无符号位,右移最高位补0


预处理

#include 
#define  N 10
预处理命令:, 都是以 # 开头的  10为值

编辑程序 --vi ,编译程序 --gcc ,运行文件 

gcc的编译过程:

.c --- 机器代码 (0110)

预处理: 
    把程序中 # 开头的预处理命令 执行了 。形成 --预处理文件 --源代码文件 
    eg:
       gcc -E main.c -o main.i 
.i 文件 进行 下一步 :编译: // 编译成汇编文件 
   gcc -S main.i -o main.s 
 
汇编 //将汇编文件 编译 成 目标文件(机器代码)
   gcc -c mian.s -o main.o 
    
链接:
     需要与用到相关库函数进行链接 ,生产最终可执行文件。
   sqrt 
   -lm  (math)

预处理:
1.宏定义  2.头文件包含 3.条件编译 
1.宏定义 
 (1).#define N 10 
   
   注意:
     a. 宏名 --标识符 
        符合标识符的定义规则。
        一般写成大写。
     b. 宏对应的值 是一个常量 
      N = 20;
     c. 只是做简单的文本的替换,不做计算 
     d. 宏的嵌套 
     e.最后不能写分号,因为分号也会作为宏值一部分,参与到文本的替换中
     f.#undef 终止宏的定义 
       后面的代码不能再用这个宏 
     
 (2).带参的宏 
     形式:
      #define 宏名(参数) 宏值 
    宏展开的副作用(运算将值代入之后,考虑运算),能加括号的都加上 。

2.文件包含 
 #include <>  ;  #include ""
3.条件编译

eg:
 #include  
<> //表示包含的文件,在编译器默认的搜索路径下 。
/usr/include 

找的时候,直接到默认路径下寻找。

#include
#include "/usr/include/test.txt"
"" 先在当前目录下寻找,若没有再到默认目录下寻找。
 

你可能感兴趣的:(java,开发语言,c语言,算法,linux,arm,arm开发)