数据结构C语言链表的实现介绍
目录
- 前言
- 函数
- 1. 链表初始化
- 2. 计算链表长度
- 3. 打印链表
- 4.计算链表长度
- 5. 删除链表中指定位置节点
- 6. 向链表中指定位置插入节点
- 7. 全代码+运行效果
前言 需要用到的函数库
#include#include
malloc函数用来动态分配空间,相当于Java中new的作用
先是需要创建一个节点的结构体
typedef struct{int data; struct linkNode* next; }linkNode;
函数 【数据结构C语言链表的实现介绍】
1. 链表初始化
void iniLinkList(linkNode *fp){//初始化链表传入一个头节点linkNode *point = fp; //定义一个指针指向头节点for(int i=0; i<5; i++){linkNode *node = malloc(sizeof(linkNode)); node->data=https://www.it610.com/article/i; node->next=NULL; point->next = node; point=point->next; }}
2. 计算链表长度
int countListLength(linkNode *fp){//fp:链表头节点linkNode *point = fp; //定义指针指向头节点int sum = 0; //用来计算链表节点个数while(point->next){sum++; point=point->next; }return sum; }
3. 打印链表
void printLinkList(linkNode *fp){//传入链表头节点linkNode *point = fp; //定义指针指向头节点printf("链表内容如下:\n"); while(point->next){linkNode *node = point->next; printf("%d\t",node->data); point=point->next; }printf("\n"); }
4.计算链表长度
int countListLength(linkNode *fp){//fp:链表头节点linkNode *point = fp; //定义指针指向头节点int sum = 0; //用来计算链表节点个数while(point->next){sum++; point=point->next; }return sum; }
5. 删除链表中指定位置节点
int deleteNode(int index,linkNode *fp){//index:链表中节点的下标,fp:链表头节点linkNode *point = fp; //定义指针指向头节点if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)printf("下标不在链表内!"); return 1; //返回1表示删除失败}else{for(int i=0; inext; }linkNode *node = point->next; point->next=node->next; //删除下标位置节点return 0; //返回0表示删除成功}}
6. 向链表中指定位置插入节点
void insertLinkNode(linkNode *fp,int index,int data){//index:链表中节点的下标,fp:链表头节点,data:插入的新数据linkNode *point = fp; //定义指针指向头节点if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)printf("下标不在链表内!"); return; }else{for (int i=0; inext; //找到下标位置前一个节点linkNode *node = malloc(sizeof(linkNode)); node->data=https://www.it610.com/article/data; //创建新节点node->next=point->next; //将下标前一个节点的next赋值给node的nextpoint->next = node; //将新创建的节点的地址给下标位置前一个节点}}
7. 全代码+运行效果
#include#includetypedef struct{int data; struct linkNode* next; }linkNode; //初始化链表void iniLinkList(linkNode *fp){//初始化链表传入一个头节点linkNode *point = fp; //定义一个指针指向头节点for(int i=0; i<5; i++){linkNode *node = malloc(sizeof(linkNode)); node->data=https://www.it610.com/article/i; node->next=NULL; point->next = node; point=point->next; }}//向链表中指定位置插入节点void insertLinkNode(linkNode *fp,int index,int data){//index:链表中节点的下标,fp:链表头节点,data:插入的新数据linkNode *point = fp; //定义指针指向头节点if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)printf("下标不在链表内!"); return; }else{for (int i=0; i next; //找到下标位置前一个节点linkNode *node = malloc(sizeof(linkNode)); node->data=https://www.it610.com/article/data; //创建新节点node->next=point->next; //将下标前一个节点的next赋值给node的nextpoint->next = node; //将新创建的节点的地址给下标位置前一个节点}}//删除链表中指定位置节点int deleteNode(int index,linkNode *fp){//index:链表中节点的下标,fp:链表头节点linkNode *point = fp; //定义指针指向头节点if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)printf("下标不在链表内!"); return 1; //返回1表示删除失败}else{for(int i=0; i next; }linkNode *node = point->next; point->next=node->next; //删除下标位置节点return 0; //返回0表示删除成功}}//计算链表长度int countListLength(linkNode *fp){//fp:链表头节点linkNode *point = fp; //定义指针指向头节点int sum = 0; //用来计算链表节点个数while(point->next){sum++; point=point->next; }return sum; }//打印链表void printLinkList(linkNode *fp){//传入链表头节点linkNode *point = fp; //定义指针指向头节点printf("链表内容如下:\n"); while(point->next){linkNode *node = point->next; printf("%d\t",node->data); point=point->next; }printf("\n"); }int main(){linkNode *linkList = malloc(sizeof(linkNode)); //创建一个头节点iniLinkList(linkList); printLinkList(linkList); deleteNode(3,linkList); printf("删除后"); printLinkList(linkList); insertLinkNode(linkList,3,7); printf("插入后"); printLinkList(linkList); return 0; }// 链表内容如下:// 01234// 删除后链表内容如下:// 0124// 插入后链表内容如下:// 01274
到此这篇关于数据结构C语言链表的实现介绍的文章就介绍到这了,更多相关C语言链表实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- C语言用递归函数实现汉诺塔
- #|计算机网络(应用层 - 万维网 WWW、HTTP 协议以及 HTML 语言)
- C++使用链表实现图书管理系统
- YY|【C语言】三子棋游戏与多子棋 (保姆级的实现过程)
- 可作为工质状态参数的是_知到网课答案多元统计分析及R语言建模课后作业答案...
- 单细胞测序|经验总结 | R语言批量读取目录下的文件然后按照行名对其进行整合成为data.frame
- 笔记|R语言画图 | 如何看已知基因list的细胞类型特异性表达()
- 拓端tecdat|【视频】线性混合效应模型(LMM,Linear Mixed Models)和R语言实现案例
- 拓端tecdat|拓端tecdat|R语言多变量广义正交GARCH(GO-GARCH)模型对股市高维波动率时间序列拟合预测
- 拓端tecdat|拓端tecdat|R语言用收缩估计股票beta系数回归分析Microsoft收益率风险