这篇文章将为大家详细讲解有关如何进行数据结构C语言链表的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
前言
需要用到的函数库
#include<stdio.h>#include<malloc.h>
malloc函数用来动态分配空间,相当于Java中new的作用
先是需要创建一个节点的结构体
typedef struct{ int data; struct linkNode* next;}linkNode;
函数
1. 链表初始化
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. 计算链表长度
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;i<index;i++){ //遍历找到下标前一个位置 point=point->next; } 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;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. 全代码+运行效果
#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语言链表的实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。