学习嵌入式第十天

第十天

1.c语言基础之链表插入节点

  • p指针遍历链表,假如要插入到id为5的节点后面,当p遍历到id为5的节点时,让新节点的next指向p的next,然后让p的next指向新节点。

2.c语言基础之链表删除节点

  • p指针遍历链表,假如要删除id为5的节点,当p遍历到id为4的节点时(遍历条件为 p != NULL && p->next != NULL),让一个新的指针指向id为5的节点(*d = p->next),然后让p的next指向id为6的节点(p->next = d->next),然后将d释放(free(d))然后id为5的节点就删除掉了。如果是删除头节点直接让head=head->next;

链表操作图示(灵魂画手)删除图示为删除带头节点链表(头节点不存数据,数据从第二个节点开始)的节点情况:
学习嵌入式第十天_第1张图片
学习嵌入式第十天_第2张图片
3.c语言基础之头尾指针分配空间问题

  • struct Student *head = (struct Student *)maoolc(sizeof(struct Student) )
  • struct Student *tail= (struct Student *)maoolc(sizeof(struct Student) )
  • struct Student *new = (struct Student *)maoolc(sizeof(struct Student) ) > - 第一第三个都没问题,tail指针让其tail=head时,会造成内存泄漏。此时我们应该让tail指向NULL。
  • 结构体分配空间之后最好是为结构体的内部成员进行初始化,这是代码规范。也减免了其他不需要的错误。

4.c语言基础之二级指针

 10     int i; 
 11     struct Student *tail = *head;
 12     tail->id = 0; 
 13     //(*head)->id=0;
 14     for (i = 0; i < 3; i++) { 
 15         struct Student *node = (struct Student *)malloc(sizeof(struct Student>
 16         node->next = NULL; 
 17         node->id = i + 1;
 18          
 19         tail->next = node;
 20         
 21         tail = node;
 22     }   
 23 }  

initLink传参传入的是二级指针head,因为要改变main函数中一级指针head的值,所以要传一级指针的指针,即二级指针。重点是:二级指针取其一级指针的值需(*head)->id 才可以取到值。

如下为完整demo代码:

#include 
struct Student {    
	int id;
    struct Student *next;
};

void initLink(struct Student **head) {    
	int i;
    struct Student *tail = *head;    
    tail->id = 0;
    //(*head)->id=0;    
    for (i = 0; i < 3; i++) {
        struct Student *node = (struct Student *)malloc(sizeof(struct Student));        node->next = NULL;
        node->id = i + 1;
        tail->next = node;
        tail = node;   
    }
}
void printLink(struct Student *p) {    while (p) {
        printf("id->%d\n", p->id);        p = p->next;
    }}

int main() {    struct Student *head = (struct Student *)malloc(sizeof(struct Student));
    initLink(&head);    printLink(head);
    return 0;}

5.c语言基础之带头结点的链表和不带头节点的链表

未完待续

6.c语言基础之程序运行四阶段

  • 预处理
  • 编译
  • 汇编
  • 链接

7.c语言基础之头文件框架编写

#ifndef __ NAME_H __
#define __ NAME_H __
头文件内容
#endif
这样做的作用是防止头文件重复包含(include)

学习嵌入式第十天_第3张图片
在头文件里定义变量要定义成静态变量,否则多次引用该头文件会造成重复定义的错误。

你可能感兴趣的:(c,linux)