c语言如何查询结构体中的数据(数据结构的链表怎么连接c语言)

技术如何进行数据结构C语言链表的实现这篇文章将为大家详细讲解有关如何进行数据结构C语言链表的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言需要用到的函数库#inc

本文将详细说明如何用C语言实现数据结构链表。这篇文章的内容质量很高,所以边肖会分享给大家作为参考。希望你看完这篇文章后有所了解。

前言

需要用到的函数库

# includestdio.h

# includedmalloc.h malloc函数用于动态分配空间,相当于Java中new的角色。

先是需要创建一个节点的结构体

typedefstruct{

intdata

structlinkNode *下一步;

} linkNode00-1010

函数

votinilinklist(link node * FP){//初始化链表,传入头节点。

linkNode * point=fp//定义指向头节点的指针

for(inti=0;i5;I){ 0

linkNode * node=malloc(sizeof(linkNode));

节点数据=I;

节点-下一个=空;

点-下一个=节点;

点=点-下一个;

}

}

1. 链表初始化

intcountlistlength(link node * FP){//FP :链表头节点

linkNode * point=fp//定义指向头节点的指针

int sum=0;//用于计算链表节点数。

while(点-下一个){ 0

总和;

点=点-下一个;

}

returnsum

}

2. 计算链表长度

voitprintlinklist(link node * FP){//传入链表头节点

linkNode * point=fp//定义指向头节点的指针

Printf('链表内容如下:\ n ');

while(点-下一个){ 0

link node * node=point-next;

printf('%d\t ',节点数据);

点=点-下一个;

}

printf(' \ n ');

}

3. 打印链表

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语言链表的实现就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151264.html

(0)

相关推荐

  • Mysql8.0.17如何安装

    技术Mysql8.0.17如何安装这篇文章给大家分享的是有关Mysql8.0.17如何安装的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.因为系统重装 又双叒叕开始了装myql数据库下载安装

    攻略 2021年12月4日
  • Python实战小项目之如何实现身份证信息校验

    技术Python实战小项目之如何实现身份证信息校验这篇文章主要介绍“Python实战小项目之如何实现身份证信息校验”,在日常操作中,相信很多人在Python实战小项目之如何实现身份证信息校验问题上存在疑惑,小编查阅了各式

    攻略 2021年10月20日
  • 烟怎么读,KENT这个烟中文怎么读

    技术烟怎么读,KENT这个烟中文怎么读kent香烟是一种香烟品牌烟怎么读,是美国英美烟草(品牌)集团授权于新加坡等地制造。英文是“KENT。亦称为“肯特”、“箭牌”、“健牌”、“建牌”、“长箭”等,因该烟通体白色的缘故而

    生活 2021年10月24日
  • 早餐有哪些,早餐应该吃什么东西比较好

    技术早餐有哪些,早餐应该吃什么东西比较好都说一年之计在于春早餐有哪些,一日之计在于晨,大家都知道早晨是充满活力的时候!一顿营养丰富的早餐也是非常重要的,尤其是对男性朋友!你们知道男性早餐吃什么最有营养吗,适合男人的早餐食

    生活 2021年10月27日
  • 如何解析Perl命令行程序用法

    技术如何解析Perl命令行程序用法如何解析Perl命令行程序用法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Perl命令行程序命令行程序下面的几个Pe

    攻略 2021年11月12日
  • 怎么处理数据库中文字符集乱码

    技术怎么处理数据库中文字符集乱码本篇内容主要讲解“怎么处理数据库中文字符集乱码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么处理数据库中文字符集乱码”吧!一、问题描述

    攻略 2021年11月11日