数据结构C语言链表的实现介绍
大家好,本篇文章主要讲的是数据结构C语言链表的实现介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
目录
前言
函数
1. 链表初始化
2. 计算链表长度
3. 打印链表
4.计算链表长度
5. 删除链表中指定位置节点
6. 向链表中指定位置插入节点
7. 全代码+运行效果
前言
需要用到的函数库
1 2 | #include<stdio.h> #include<malloc.h> |
malloc函数用来动态分配空间,相当于Java中new的作用
先是需要创建一个节点的结构体
1 2 3 4 | typedef struct { int data; struct linkNode* next; }linkNode; |
函数
1. 链表初始化
1 2 3 4 5 6 7 8 9 10 | void iniLinkList(linkNode *fp){ //初始化链表传入一个头节点 linkNode *point = fp; //定义一个指针指向头节点 for ( int i=0;i<5;i++){ linkNode *node = malloc ( sizeof (linkNode)); node->data=i; node->next=NULL; point->next = node; point=point->next; } } |
2. 计算链表长度
1 2 3 4 5 6 7 8 9 | int countListLength(linkNode *fp){ //fp:链表头节点 linkNode *point = fp; //定义指针指向头节点 int sum = 0; //用来计算链表节点个数 while (point->next){ sum++; point=point->next; } return sum; } |
3. 打印链表
1 2 3 4 5 6 7 8 9 10 | 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.计算链表长度
1 2 3 4 5 6 7 8 9 | int countListLength(linkNode *fp){ //fp:链表头节点 linkNode *point = fp; //定义指针指向头节点 int sum = 0; //用来计算链表节点个数 while (point->next){ sum++; point=point->next; } return sum; } |
5. 删除链表中指定位置节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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<index;i++){ //遍历找到下标前一个位置 point=point->next; } linkNode *node = point->next; point->next=node->next; //删除下标位置节点 return 0; //返回0表示删除成功 } } |
6. 向链表中指定位置插入节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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<index;i++) point=point->next; //找到下标位置前一个节点 linkNode *node = malloc ( sizeof (linkNode)); node->data=data; //创建新节点 node->next=point->next; //将下标前一个节点的next赋值给node的next point->next = node; //将新创建的节点的地址给下标位置前一个节点 } } |
7. 全代码+运行效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include<stdio.h> #include<malloc.h> typedef 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=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<index;i++) point=point->next; //找到下标位置前一个节点 linkNode *node = malloc ( sizeof (linkNode)); node->data=data; //创建新节点 node->next=point->next; //将下标前一个节点的next赋值给node的next point->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<index;i++){ //遍历找到下标前一个位置 point=point->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; } // 链表内容如下: // 0 1 2 3 4 // 删除后链表内容如下: // 0 1 2 4 // 插入后链表内容如下: // 0 1 2 7 4 |
到此这篇关于数据结构C语言链表的实现介绍的文章就介绍到这了
原文链接:https://blog.csdn.net/qq_43718893/article/details/121930975