当前位置 博文首页 >  落禅的博客:链表学习:静态链表

     落禅的博客:链表学习:静态链表

    作者:[db:作者] 时间:2021-09-10 22:40

    链表的概念:

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

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

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

    链表的分类:

    链表的分类:静态链表,动态链表
    单向链表,双向链表,循环链表,单向循环链表,双向循环链表

    链表和数组的区别:

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

    静态链表的简单使用:

    #include<stdio.h>
    //链表结点定义
    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;
    }
    

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

    cs
    下一篇:没有了