iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中单链表怎么用
  • 703
分享到

C语言中单链表怎么用

2023-06-29 16:06:31 703人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关C语言中单链表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、单链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序

这篇文章将为大家详细讲解有关C语言中单链表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1、单链表

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

C语言中单链表怎么用

C语言中单链表怎么用

 (链表和我们生活中最接近的就是火车了。)

2、单链表的实现

接下来我们来实现单链表的增删查改

头文件

#pragma once #include <stdio.h>#include <assert.h>#include <stdlib.h> typedef int SLDataType; //链表的创建typedef struct SListnode{SLDataType data;//valstruct SListNode* next;//存储下一个结点的地址}SListNode,SLN; //打印链表void SListPrint(SListNode* phead); //尾插void SListPushBack(SListNode** pphead, SLDataType x); //头插void SListPushFront(SListNode** pphead, SLDataType x); //尾删void SListPopBack(SListNode** pphead); //头删void SListPopFront(SListNode** pphead); //查找SListNode* SListFind(SListNode* phead, SLDataType x); //在pos位置之前插入void SListInsert(SListNode** pphead, SListNode* pos, SLDataType x); //删除pos位置void SListErase(SListNode** pphead, SListNode* pos); //在pos位置之后插入void SlistInserAfter(SListNode* pos, SLDataType x); //删除pos后的值void SlistEraseAfter(SListNode* pos); //用完销毁void SListDestroy(SListNode** pphead);

函数的实现

(1)打印链表
void SListPrint(SListNode* phead){assert(phead); SListNode* cur = phead; if (cur == NULL){printf("SList is NULL\n");} while (cur != NULL){printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");}
(2)动态申请结点

将一个data x动态申请结点。

C语言中单链表怎么用

SListNode* BuySList(SLDataType x){SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));if (newnode == NULL){printf("malloc fail\n");exit(-1);}else{newnode->data = x;newnode->next = NULL;}return newnode;}
(3)尾插

C语言中单链表怎么用

C语言中单链表怎么用

void SListPushBack(SListNode** pphead, SLDataType x){assert(pphead); SListNode* newnode = BuySList(x);if (*pphead == NULL){*pphead = newnode;}else{//找尾SListNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}//走完循环找到尾tail->next = newnode;} }
(4)头插

C语言中单链表怎么用

void SListPushFront(SListNode** pphead, SLDataType x){assert(pphead); SListNode* newnode = BuySList(x); newnode->next = *pphead;*pphead = newnode; }
(5)尾删

C语言中单链表怎么用

void SListPopBack(SListNode** pphead){assert(pphead); //当链表只有一个结点时if (*pphead == NULL){printf("SListNode is NULL\n");return;}//当链表只有一个结点时else if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}//当链表有多个结点时else{SListNode* tail = *pphead;while (tail->next->next != NULL){tail = tail->next;}free(tail->next);tail->next = NULL;}}
(6)头删

C语言中单链表怎么用

void SListPopFront(SListNode** pphead){assert(pphead); if (*pphead == NULL){printf("SList is NULL\n");return;}else{SListNode* next = (*pphead)->next;free(*pphead);*pphead = next;}}
(7)查找
SListNode* SListFind(SListNode* phead, SLDataType x){assert(phead); SListNode* cur = phead;while (cur != NULL){if (cur->data == x){return cur;}//如果没找到就往下走cur = cur->next;}//循环完成后还没找到就说明链表中没有该值return NULL;}
(8)在pos之前插入

C语言中单链表怎么用

C语言中单链表怎么用

void SListInsert(SListNode** pphead, SListNode* pos, SLDataType x){assert(pphead);assert(pos); //pos是第一个位置if (pos == *pphead){SListPushFront(pphead, x);} //pos不是第一个位置else{SListNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}SListNode* newnode = BuySList(x);prev->next = newnode;newnode->next = pos;}}
(9)删除pos

C语言中单链表怎么用

void SListErase(SListNode** pphead, SListNode* pos){assert(pphead);assert(pos); //1、头结点为空if (*pphead == NULL){printf("SList is NULL\n");return;}//2、删除第一个结点else if (pos == *pphead){SListPopFront(pphead);}//3、其他结点else{SListNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);pos = NULL;}}
(10)在pos之后插入

相对于在pos之前插入,在pos后插入可以不用传头结点,无论pos在哪个位置都适用。

C语言中单链表怎么用

void SListInsertAfter(SListNode* pos, SLDataType x){assert(pos); SListNode* newnode = BuySList(x);SListNode* next = pos->next; pos->next = newnode;newnode->next = next;     //下面这种方式也可以}
(11)在pos后删除

C语言中单链表怎么用

void SListEraseAfter(SListNode* pos){assert(pos); SListNode* next = pos->next;if (next){pos->next = next->next;free(next);next = NULL;}}
(12)最后用完记得销毁
void SListDestroy(SListNode** pphead){assert(pphead); SListNode* cur = *pphead;while (cur){SListNode* next = cur->next;free(cur);cur = next;} *pphead = NULL;}

3、各功能的测试

#include "SList.h" void test1(){SListNode* slist = NULL; //测试尾插SListPushBack(&slist, 1);SListPushBack(&slist, 2);SListPushBack(&slist, 3);SListPushFront(&slist, 5);SListPushFront(&slist, 4);SListPrint(slist); //测试头插SListPushFront(&slist, 5);SListPushFront(&slist, 4);SListPrint(slist); //测试尾删SListPopBack(&slist);SListPopBack(&slist);SListPrint(slist); //测试头删SListPopFront(&slist);SListPopFront(&slist);SListPopFront(&slist);SListPrint(slist); //测试查找SListNode* ret1 = SListFind(slist, 5);printf("%d\n", ret1->data); //pos前插测试SListNode* pos = SListFind(slist, 1);if (pos){SListInsert(&slist,pos,3);}SListPrint(slist);pos = SListFind(slist, 1);if (pos){SListInsert(&slist, pos, 10);}SListPrint(slist); //删除pos测试pos = SListFind(slist, 10);if (pos){SListErase(&slist, pos);}SListPrint(slist); //测试在pos后插入pos = SListFind(slist, 3);if (pos){SListInsertAfter(pos, 6);}SListPrint(slist);pos = SListFind(slist, 1);if (pos){SListInsertAfter(pos, 8);}SListPrint(slist); //测试删除pos后的值pos = SListFind(slist, 1);if (pos){SListEraseAfter(pos);}SListPrint(slist); } int main(){test1(); return 0;}

运行结果:

C语言中单链表怎么用

单链表的实现到此结束,如果你还想更进一步,请关注后续----单链表OJ,让你从此不再迷茫! 

关于“C语言中单链表怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: C语言中单链表怎么用

本文链接: https://www.lsjlt.com/news/325659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中单链表怎么用
    这篇文章将为大家详细讲解有关C语言中单链表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、单链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序...
    99+
    2023-06-29
  • C语言中链表与单链表有什么用
    这篇文章将为大家详细讲解有关C语言中链表与单链表有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链表是什么及链表的优势链表是一种介于数组的另外一种数据结构:我们知道数组可以存放很多的元素,这些元素都...
    99+
    2023-06-29
  • C语言链表与单链表详解
    链表是什么及链表的优势 链表是一种介于数组的另外一种数据结构: 我们知道数组可以存放很多的元素,这些元素都是呈线性排列,也就是一个挨着一个连续存放 但是当元素足够多时,还能继续正常的...
    99+
    2024-04-02
  • C语言中单链表如何实现
    这篇文章主要介绍“C语言中单链表如何实现”,在日常操作中,相信很多人在C语言中单链表如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中单链表如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • 详解C语言之单链表
    目录一、思路步骤1. 定义结构体2.初始化3.求当前数据元素的个数4.插入5.删除6.释放内存空间二、代码总结 一、思路步骤 1. 定义结构体 a.数据域:用来存放数据 b.指针域...
    99+
    2024-04-02
  • c语言单链表反转代码怎么写
    以下是一个简单的C语言单链表反转代码示例: #include #include // 定义链表节点结构体 typedef st...
    99+
    2023-10-26
    c语言
  • C语言中单链表的示例分析
    这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用来存放下一个数据的位置2.初始化申请头结...
    99+
    2023-06-25
  • C语言单链表实例分析
    今天小编给大家分享一下C语言单链表实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、移除链表元素链接直达:移除链表元...
    99+
    2023-06-30
  • c语言单链表如何创建
    创建单链表的基本思路如下:1. 定义一个结构体用来表示链表中的节点,结构体中包含一个数据域用来存储节点的值,还包含一个指针域用来指向...
    99+
    2023-08-25
    c语言
  • C语言链表有什么用
    这篇文章将为大家详细讲解有关C语言链表有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链表的概念及结构概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次...
    99+
    2023-06-25
  • C语言中如何使用链表
    这篇文章主要介绍C语言中如何使用链表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、结构体的概念比如说学生的信息,包含了学生名称、学号、性别、年龄等信息,这些参数可能有些是数组型、字符型、整型、甚至是结构体类型的数...
    99+
    2023-06-29
  • C语言怎么实现线性动态单向链表
    本篇内容主要讲解“C语言怎么实现线性动态单向链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现线性动态单向链表”吧!什么是链表链表是数据结构里面的一种,线性链表是链表的一种,线性链...
    99+
    2023-06-30
  • C语言数据结构之单链表怎么实现
    本文小编为大家详细介绍“C语言数据结构之单链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言数据结构之单链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.为什么使用链表在学习链表以前,...
    99+
    2023-07-02
  • C语言怎么实现单链表的基本功能
    本篇内容主要讲解“C语言怎么实现单链表的基本功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现单链表的基本功能”吧!首先简单了解一下链表的概念:要注意的是链表是一个结构体实现的一种...
    99+
    2023-06-21
  • C语言中的链表有什么作用
    这篇文章主要介绍“C语言中的链表有什么作用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中的链表有什么作用”文章能帮助大家解决问题。首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,...
    99+
    2023-06-16
  • C语言中链表的作用是什么
    C语言中链表的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,编译器仅按地址处理它,但是在您...
    99+
    2023-06-16
  • C语言双链表怎么实现
    本篇内容介绍了“C语言双链表怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义链表是通过一组任意的存储单元来存储线性表中的数据元素,...
    99+
    2023-06-29
  • C语言链表是怎么样的
    这篇文章将为大家详细讲解有关C语言链表是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.链表概况1.1 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序...
    99+
    2023-06-29
  • C语言如何实现单链表操作
    本篇内容介绍了“C语言如何实现单链表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 链表的概念及结构概念:链表是一种物理存储结构上非连...
    99+
    2023-06-29
  • C语言数据结构中单向环形链表怎么实现
    这篇“C语言数据结构中单向环形链表怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言数据结构中单向环形链表怎么实现...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作