C语言基础---链表

作者: ZebraWei | 来源:发表于2018-07-24 23:07 被阅读2次

版权声明:本文为小斑马伟原创文章,转载请注明出处!
一、数组的缺陷
数组的缺陷1:静态空间,一旦分配内存后,不可以动态扩展。如果分配少了,可能不够用,如果分配多了,可能造成浪费。
数组缺陷2:对头部删除和插入、效率很低。因为头部数据插入和删除,要移动数据。
二、链表的基本概念
链表的组成:链表是由节点组成的,节点由数据域和指针域组成。
链表的分类:方式1:静态链表 动态链表 方式2:单向链表 双向链表 单向循环链表和双向循环链表。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//1.静态链表

//节点的声明
struct LinkNode
{
    int num; //数据域
    struct LinkNode* next; //指针域
};

void test01() 
{
   //创建节点
   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 };

      //建立关系
   node1.next = &node2;
   node2.next = &node3;
   node3.next = &node4;
   node4.next = &node5;
   node5.next = NULL;

   //如何遍历这个链表

   //创建一个指针 指向第一个节点
   struct LinkNode* pCurrent = &node1;

   while (pCurrent != NULL) {
       printf("%d\n", pCurrent->num);

       pCurrent = pCurrent->next;
   }

}

//动态链表
void test2() {
    struct LinkNode* node1 = malloc(sizeof(struct LinkNode));
    struct LinkNode* node2 = malloc(sizeof(struct LinkNode));
    struct LinkNode* node3 = malloc(sizeof(struct LinkNode));
    struct LinkNode* node4 = malloc(sizeof(struct LinkNode));
    struct LinkNode* node5 = malloc(sizeof(struct LinkNode));

    node1->num = 10;
    node2->num = 30;
    node3->num = 50;
    node4->num = 70;
    node5->num = 90;

 //建立关系
    node1->next = node2;
    node2->next = node3;
    node3->next = node4;
    node4->next = node5;
    node5->next = NULL;

//遍历链表
   struct LinkNode* pCurrent = node1;
   while (pCurrent != NULL) {
       printf("%d\n", pCurrent->num);

       pCurrent = pCurrent->next;
    }

}

int main() {
    test01();
    printf("\n");
    test2();
    system("pause");
    return EXIT_SUCCESS;

}

静态链表 创建在栈上 动态链表 创建在堆上
三、带头和不带头的链表
带头节点链表:固定一个节点作为头结点(数据域不保存有效数据),起一个标志位的作用,以后不管链表节点如何改变,此头节点固定不变。


不带节点的链表:头节点不固定,根据实际需要交换头节点(如在原来头节点前插入新节点,然后,新节点重新作为链表的头节点)。

相关文章

  • c语言基础-链表

    链表 typedef struct Node{int value;struct Node * next;}NOD...

  • C语言基础---链表

    版权声明:本文为小斑马伟原创文章,转载请注明出处!一、数组的缺陷数组的缺陷1:静态空间,一旦分配内存后,不可以动态...

  • C语言基础 之 链表基础

    结构体 利用结构体构成链表 结构体中含有可以指向本结构体的指针成员 当一个结构体中含有一个或多个成员的基本类型就是...

  • C语言基础啦啦啦(链表)

    C语言基础 链表 malloc将堆区分出来一块空间 用堆区划分上程序 链表初级思想。再回首,真。。。。。

  • C语言基础 - 实现单向链表

    写在前面弄了下个人站...防止内容再次被锁定...所有东西都在这里面welcome~个人博客 回归C基础实现一个单...

  • C语言基础 之 链表操作

    链表的操作 对链表的主要操作有建立链表、结构的查找与输出、结点数据的删除和结点数据的插入示例 动态链表的建立 动态...

  • 链表逆置C语言完整代码

    链表逆置C语言完整代码

  • Java实现简单的链表-面向初学者

    很久之前用C语言实现过链表,现在已经太久没用C语言。就先用JAVA实现一个简单链表好了,还是使用最原始的C语言实现...

  • 链表(C语言)

    LinkList.h LinkList.c

  • C语言链表

    链表 链表用于解决合理利用存储空间的问题 malloc在没有连续内存空间的时候分配会失败 解决方案:不要一次性开辟...

网友评论

    本文标题:C语言基础---链表

    本文链接:https://www.haomeiwen.com/subject/kszjmftx.html