数据结构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; inext; //找到下标位置前一个节点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; inext; }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语言链表实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读