链表总结

   

一开始学习链表的时候比较一头雾水,我觉得主要原因是我指针那一部分的知识都已经忘记了,所以我又看了一遍C++课本里指针那一部分的知识,就能大体搞懂链表了。然后开始做 LintCode 上的链表的一开始的几个简单的题练练手。后来又花了三四个小时看了老师讲的链表的插入排序那个题, 把每一个细节都搞懂,感觉做完这个插入排序做链表这里的题都比较得心应手了。

我感觉链表这个线性结构有好的地方也有不好的地方。跟数组比较的话,数组每次开辟的空间都是固定的,开大了比较浪费,开小了又容易越界,而链表就能在使用的时候不断追加,而且链表的插入也比数组好用。但链表比较不好的地方就是它不能像数组一样利用下标进行访问,必须挨个节点访问,比较麻烦。

链表这里我觉得需要掌握头插法、尾插法,搞懂链表的插入排序,明白什么时候需要给链表插头节点,其实插头节点就是为了统一处理空和非空的节点,使操作比较容易~

最后附到今天为止老师布置的题的完成情况截图~



   



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
链表是一种常用的数据结构,用于存储一系列元素。C语言中,链表是通过指针来实现的,每个节点包含数据和指向下一个节点的指针。 以下是链表的基础知识总结: 1. 链表的定义: ```c struct Node { int data; struct Node* next; }; ``` 其中,data 表示节点存储的数据,next 表示指向下一个节点的指针。 2. 链表的操作: - 创建节点: ```c struct Node* createNode(int data) { struct Node* node = (struct Node*) malloc(sizeof(struct Node)); node->data = data; node->next = NULL; return node; } ``` - 插入节点: ```c void insertNode(struct Node* head, int data) { struct Node* node = createNode(data); node->next = head->next; head->next = node; } ``` 其中,head 表示链表头节点。 - 删除节点: ```c void deleteNode(struct Node* head, int data) { struct Node* p = head->next; struct Node* q = head; while (p != NULL) { if (p->data == data) { q->next = p->next; free(p); break; } q = p; p = p->next; } } ``` - 遍历链表: ```c void traverseList(struct Node* head) { struct Node* p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } ``` - 销毁链表: ```c void destroyList(struct Node* head) { struct Node* p = head->next; while (p != NULL) { struct Node* q = p; p = p->next; free(q); } head->next = NULL; } ``` 3. 链表的优缺点: 链表的优点是插入和删除操作的时间复杂度为 O(1),而数组的时间复杂度为 O(n)。但是,链表的缺点是无法随机访问元素,需要遍历整个链表才能找到要查找的元素。此外,链表需要额外的空间来存储指向下一个节点的指针。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值