C语言学习--链式结构

结构体的应用:

//数据结构与算法

数据结构 ---- 指的是 数据的组织形式

数组 --- 数据结构

数组特点

连续性,有序性,单一性

数据操作(访问)时的特点


数组:

数据结构体---操作时候的特点, //特点决定他应用的场合

优势, si 随机访问(随机存取)---> 存 拿数据很方便

不足: 插入数据 删除数据 不方便

链表

链式数据结构;

struct stu s1;

struct stu s2;

struct stu s3;

s1->s2->s3

特点:

优势:增加和删除数据 很方便

不足:存和取数据的时候不方便,没有数组方便

数据

指针

节点

struct Node

{

int data; //数据域 --存储要处理的数据

struct Node*next; //保存地址--指向下一个节点

}; //节点类型

struct Node n1;

struct Node n2;

struct Node n3;

链式存储的样子:

数据n1\] \[数据n2\] \[数据n3

指针\&n2\] \[指针\&n3\] \[指针 xxx

n1 n2 n3


有头链表和无头链表

无头--第一个节点数据与为随机值或者无效值

有头--第一个节点不存有效数据 //作用:为了更方便的操作链表

C语言中 ---> 主要研究 "有头单项链表"

头节点 ---数据域值随机

首节点 ---第一个保存有效数据的节点

尾节点 ---链表的最后一个有效节点 NULL。

操作: //数据结构体 数据的处理 --> 增删改查

1、创建一个链表

//空链表 -- 只有头节点 ,但没有有效的数据节点

struct Node *createEmptyLinklist(struct Node **head)

{

//struct Node *head = malloc(sizeof(struct Node));

*head = malloc(sizeof(struct Node));

(*head)->next = NULL;

return *head;

}

头加

void pushFront(struct Node *head,int dt)

{

struct Node *new = malloc(sizeof(struct Node ));

new->data = dt;

//s2

new->next = head->next;

//s3

head->next = new;

}

尾加

void pushBack(struct Node *head,int dt)

{

//s1

struct Node *new = malloc(sizeof(struct Node));

new->data = dt;

//s2

struct Node *p = head;

while (p->next!=NULL)

{

p = p->next;

}

//s3

p->next = new;

new->next = NULL;

}

头删

void popFront(struct Node *head)

{

struct Node *p = head->next;

head->next = p->next;

free(p);

}

尾删

void pushBack(struct Node *head,int dt)

{

//s1

struct Node *new = malloc(sizeof(struct Node));

new->data = dt;

//s2

struct Node *p = head;

while (p->next!=NULL)

{

p = p->next;

}

//s3

p->next = new;

new->next = NULL;

}

销毁链表:

void destroyLinklist(struct Node **head)

{

while (isEmpty(*head) == 0)

{

popFront(*head);

}

free(*head);

*head=NULL;

}

计算链表长度:

int length(struct Node *head)

{

struct Node *p = head->next;

int cnt = 0;

while (p != NULL)

{

cnt++;

p = p->next;

}

return cnt;

}

输出链表数据:

void printLinklist(struct Node *head)

{

struct Node *p = head->next; //

while ( p!= NULL)

{

printf("%d\n",p->data);

p = p->next;

}

}

相关推荐
巴巴媛6661 分钟前
STM32学习笔记【32.BKP + RTC】
笔记·stm32·学习
matlab代码4 分钟前
基于matlab人脸门禁识别系统(可增加其它人脸图像)源码40期】
开发语言·matlab·人脸识别·人脸门禁
李少兄33 分钟前
Java CompletableFuture 解析(含常见面试题)
java·开发语言
逝水无殇1 小时前
C# 枚举(Enum)详解
开发语言·后端·c#
nianniannnn1 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz1 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
什巳2 小时前
JAVA练习275-乘积最大子数组
java·开发语言·数据结构·算法
lang201509282 小时前
Apache POI Word(docx) 实战教程:从入门到精通表格合并、图片插入与文档合并
java·开发语言·word
网络与设备以及操作系统学习使用者2 小时前
通信的物理与逻辑双维度解析
学习·深度优先
鱼毓屿御2 小时前
Python 装饰器与函数调用机制(复习笔记 · 2026-07-07)
开发语言·python