博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表学习:静态链表
阅读量:726 次
发布时间:2019-03-21

本文共 1196 字,大约阅读时间需要 3 分钟。

链表的概念:

链表由一系列节点组成,其中每个节点包括两个域,一个是数据域,用来存储数据,另一个是指针域,用来存储下一个节点的地址,链表在内存中是非连续的

例如:

struct LinkNode{
int age;//定义数据域 struct LinkNode*next;//定义指针节点,指向下一个节点首地址};

链表在指定位置插入与删除元素不需要移动元素,只需要修改指针即可,而数组删除与加入元素则需要移动后面的元素,链表相对于数组来讲,则多了指针域空间开销,拿到链表第一个节点就相当于拿到整个链表

链表的分类:

链表的分类:静态链表,动态链表

单向链表,双向链表,循环链表,单向循环链表,双向循环链表

链表和数组的区别:

数组:一次分配一块连续的存储空间

优点:随机访问元素效率高
缺点:(1)需要分配一块连续的存储区域(很大区域,有可能分配失败)
(2)删除和插入某个元素效率低
链表:无需一次性分配一块连续的内存区域,只需分配n快节点存储区域,通过指针建立关系
优点:(1)不需要一块连续的存储区域
(2)删除和插入某个元素效率高
缺点:随机访问元素效率低

静态链表的简单使用:

#include
//链表结点定义struct LinkNode{
int data;//定义链表数据 struct LinkNode*next;//定义链表节点};void test(){
struct LinkNode node1 = {
10,NULL }; struct LinkNode node2 = {
20,NULL }; struct LinkNode node3 = {
30,NULL }; struct LinkNode node4 = {
40,NULL }; struct LinkNode node5 = {
50,NULL }; struct LinkNode node6 = {
60,NULL }; node1.next = &node2; node2.next = &node3; node3.next = &node4; node4.next = &node5; node5.next = &node6; //如何遍历链表:定义一个辅助指针 struct LinkNode* pCurrent = &node1; while (pCurrent != NULL) {
//打印数据 printf("%d ", pCurrent->data); //指针移动到下一个元素的首地址 pCurrent = pCurrent->next; } }int main(){
test(); return 0;}

(本文是个人学习心得,如有错误还请多多指出)

转载地址:http://vwlgz.baihongyu.com/

你可能感兴趣的文章