C语言学习--链式结构

结构体的应用:

//数据结构与算法

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

数组 --- 数据结构

数组特点

连续性,有序性,单一性

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


数组:

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

优势, s[i] 随机访问(随机存取)---> 存 拿数据很方便

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

链表

链式数据结构;

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;

}

}

相关推荐
s1533511 分钟前
C++STL-deque
开发语言·c++
Devil枫23 分钟前
Kotlin项目实战与总结
开发语言·jvm·kotlin
玖別ԅ(¯﹃¯ԅ)27 分钟前
文件追加模式:编写一个程序,向一个已存在的文件末尾追加内容。
c语言
yeziyfx40 分钟前
kotlin中集合的用法
android·开发语言·kotlin
啊我不会诶1 小时前
倍增法和ST算法 个人学习笔记&代码
笔记·学习·算法
三体世界1 小时前
TCP传输控制层协议深入理解
linux·服务器·开发语言·网络·c++·网络协议·tcp/ip
aha-凯心2 小时前
前端学习 vben 之 axios interceptors
前端·学习
随心点儿2 小时前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
不学无术の码农2 小时前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python
tomcsdn312 小时前
SMTPman,smtp的端口号是多少全面解析配置
服务器·开发语言·php·smtp·邮件营销·域名邮箱·邮件服务器