温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行数据结构C语言链表的实现

发布时间:2021-12-18 12:08:45 来源:亿速云 阅读:252 作者:柒染 栏目:开发技术

这篇文章将为大家详细讲解有关如何进行数据结构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语言链表的实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI