0
点赞
收藏
分享

微信扫一扫

C语言描述数据结构——链表


链表的基本概念

链表引出

  • 数组有缺陷
  • 静态空间,一旦分配就不可以动态扩展,要不分配不够,要不分配过多。
  • 对于数组头部进行插入和删除效率低

链表的组成

  • 链表是有节点组成的
  • 节点由 数据域和指针域组成
  • struct LinkNode{int num; struct}

链表的分类

  • 方式1: 静态链表 动态链表
  • 方式2: 单向链表 双向链表 单向循环链表 双向循环链表

静态链表和动态链表

  • 静态链表 创建在栈上
  • 动态链表 创建在堆区

代码示例:

#define
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//节点声明
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;
//如何遍历这个链表
//创建一个指针 指向第一个节点
struct LinkNode*pCurrent = &node1;
while (pCurrent != NULL)
{
printf("%d\n",pCurrent->num);
pCurrent = pCurrent->next;
}
}
//2.动态链表
void test02()
{
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 = 20;
node3->num = 30;
node4->num = 40;
node5->num = 50;
//建立关系
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;
}
//释放节点
free(node1);
free(node2);
free(node3);
free(node4);
free(node5);
}
int main()
{
test01();
test02();
return EXIT_SUCCESS;
}


举报

相关推荐

0 条评论