Hello,大家好!好久不见了,之前一直在忙于一些琐事,最近半个月内会将数据结构的各种数据结构实现出来,一个挺有意思的东西。

这次我将要介绍的是链表。链表有单链表,单向循环链表,双向链表,双向循环链表。其实这些理解透彻了还是很简单的,接下来我将给大家一一介绍,欢迎大家收藏点赞。

首先链表的定义是:线性表的链式存储结构称为链表。每个节点包含数据域和找到下一个数据的地址的变量--在C语言中是指针。概念先介绍到这里吧!

以下是我的理解写出来的代码,如有可以优化的地方欢迎大家指出。

注意:代码都经过实际检验。

#include<stdio.h>
#include<stdlib.h>typedef struct Node
{int data;        //数据域Node * next;     //指针域
}Node;
//创建表头
Node * createList()
{Node* headNode = (Node*)malloc(sizeof(Node));headNode->next=NULL;return headNode;
}
//创建节点
Node * createNode(int data)
{Node*newNode= (Node*)malloc(sizeof(Node));newNode->data=data;newNode->next=NULL;return newNode;}//头插
void headInsertNode(Node * headNode,int data)
{Node * pMove =createNode(data);//此地方要注意先要将头节点后头的节点地址保存到新节点的next域之中//再将新节点的地址保存到头节点的后头---先连后断pMove->next = headNode->next;headNode->next = pMove;}
//尾插
void tailInsertNode(Node *headNode, int data)
{//尾插先要找到链表的尾部Node * pMove = headNode->next;Node * newNode = createNode(data);while (pMove->next!=NULL){pMove = pMove->next;}pMove->next = newNode;
}
//注意指定位置插入数据是插在指定位置之前,且是查找到的第一个指定元素之前插入
void posInsertNode(Node * headNode,int updata,int data)
{Node * newNode = createNode(updata);Node * proNode = headNode;Node * posNode = headNode->next;while (posNode->data!=data){if (posNode->next == NULL){printf("你想插入的数据不存在\n");return;}proNode = posNode;posNode = posNode->next;}newNode->next = posNode;proNode->next = newNode;
}
//查找结点
void findNode(Node * headNode, int data)
{Node* pMove = headNode->next;int x = 1;while (pMove->data!=data){++x;pMove = pMove->next;}if (pMove->data == data)printf("你想要查找的数据%d,在链表的第%d个位置\n", data, x);elseprintf("你想要找的数据%d并不存在!\n", data);}
//改变指定位置的数据
void modifyNodeData(Node *headNode, int upData, int data)
{Node * pMove = headNode->next;while (pMove->data!=data){pMove = pMove->next;}pMove->data = upData;}
//删除元素
void deleteNodeData(Node * headNode, int data)
{Node * proNode = headNode;Node * pMove = headNode->next;while (pMove->data != data){proNode = pMove;pMove = pMove->next;}proNode->next = pMove->next;free(pMove);
}
//打印节点的数据
void printNode(Node * node)
{Node * pMove = node->next;while (pMove){printf("%d-->", pMove->data);pMove = pMove->next;}printf("\n");
}
int main()
{Node * list = createList();for (int i = 0; i < 10; i++){headInsertNode(list, i);}printNode(list);for (int i = 9; i < 15; i++){tailInsertNode(list, i);}printNode(list);posInsertNode(list, 78, 73);printNode(list);findNode(list, 5);printNode(list);modifyNodeData(list, 45, 5);printNode(list);deleteNodeData(list, 6);printNode(list);system("pause");return 0;
}

数据结构之链表--单链表相关推荐

  1. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  2. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  3. 数据结构之——《单链表》

    数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...

  4. 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现

    点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现

  5. 数据结构精讲——单链表

    新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...

  6. 数据结构基础(8) --单链表的设计与实现(1)之基本操作

    链表简介 数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.数组的删 ...

  7. 建立单链表 单链表的插入_单链列表插入

    建立单链表 单链表的插入 All possible cases: 所有可能的情况: Inserting at beginning 开始插入 Inserting at the ending 在末尾插入 ...

  8. 数据结构与算法笔记(三)—— 链表(单链表、循环链表、双向链表)

    一.前沿 1.1.为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活. 链表结构可以充分利用计算机内存空间,实现灵活的内 ...

  9. 数据结构--线性表链式存储(链表)--单链表

    定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素 ...

  10. [数据结构与算法] 单链表的简单demo

    Vc6之下编译通过.. 1 /******************************************************* 2 * @: Project: 单链表数据结构演示 3 * ...

最新文章

  1. Nginx —— configure的命令参数(nginx编译选项)
  2. php数组添加数组_PHP数组
  3. 关于Jakarta EE与MicroProfile的创新和关系的提案
  4. SQL分页查询方案的性能对比
  5. Expression Template(表达式模板,ET)
  6. tomcat相关实验
  7. linux下chkConfig的用法,mysqld开机自启动
  8. (个人备忘)多人开发 no file directory.....的问题
  9. 小巧数据库 Apache Derby 使用攻略
  10. oracle面试题关于课程表获取最高分和名字并且去掉重复,oracle复杂查询练习题
  11. 软件工程实验一--编程随机生成30个四则运算,算数包括100以内的整数和真分数。...
  12. 收藏 | 《周志华机器学习详细公式推导版》发布,Datawhale开源项目pumpkin-book
  13. 苹果Mac删除windows后无法合并分区的简单解决方法
  14. Python新书上市,强烈推荐!《Python网络数据爬取及分析从入门到精通(爬取篇)》导读
  15. axure中出现小手_Axure高保真滑动拼图解锁实例教程
  16. CentOS ping本机ip,能ping通,外网ping不通
  17. Selenium的PO模式
  18. 如何在线批量进行PDF拆分
  19. 代码敲累了就来看看《PPT制作经验分享-发布版PPT》
  20. origin作统计图(两个x正轴,一个y轴效果)

热门文章

  1. 数据库基础知识——数据库的相关概念
  2. java视频压缩 lz4_关于LZMA和LZ4压缩的疑惑解析
  3. BAT文件命名中含有英文括号运行出错
  4. 数字图像处理 第四章 图像增强
  5. 运行Qt程序的一些注意事项
  6. 形态学图像处理(二)
  7. python3 中的 eval 函数
  8. 【itext学习之路】--3.对pdf文档进行加密和权限设置
  9. bat脚本如何自动输入y_在Mac如何写一个相对自动的翻译脚本
  10. Cocos creator -引擎解构