在前两周我接触了一个让人头疼的东西-链表;

链表简单的说就是创建一个结构体,然后将这些每个数据存入到一个结构体里面去,通过指针的方法将这些结构体连接起来,一环扣一环,就成为了链表

官方概念

首先何谓链表? 
链式存储的线性表,简称链表。链表由多个链表元素组成,这些元素称为节点。结点之间通过逻辑连接,形成链式存储结构。存储结点的内存单元,可以是连续的也可以是不连续的。逻辑连接与物理存储次序没有关系。

链表分为两个域: 
值域:用于存放结点的值 
链域:用于存放下一个结点的地址或位置

简单的介绍:

1- 值域结构体里面包含了咱们要放进去的数据,(这里的演示我简单的放一个存储学生姓名的链表)

2- 链区域 结构体里面还包含一个指向下一个数据的指针。这个指针的将指向下一个元素的地址(这里叫节点)

下来咱们先创建一个结构体:

typedef struct xx
{char name[15];//struct xx *next;
}Node;

next 是指向下一个节点的指针 name就是我们存放名字的地方 每一个结构体都有这两部分组成

typedef:是一个高级数据特性,利用它可以为某一类型自定义名称

eg:

typedef int lengh;
//关键就在于最后一个单词 这里以后lengh就是int类型的代表
eg:
lengh a=int a;

所以我们上面用Node 以后来代替struct xx类型,算是一种方便吧

好接下开我们来看看放入数据的方法- 头插法

#include<stdio.h>
#include<stdlib.h>void creatlink(Node *head,int n)//头插法
{int i;Node *p;for(i=0; i<n; i++){p=(Node*)malloc(sizeof(Node));//这里存在一个强制类型的转换,为我们的输入的数据开辟一个空间,malloc函数在stdlib文件里;gets(p->name);p->next = head->next;//p所指新结点的指针域next指向head中的开始结点head->next=p;//头结点的指针域next指向p结点,使得p成为新的开始结点}}

这里有一个head 表头指针,里面部分放任何东西,其实链表的创建可以不要这个表头指针,有表头指针的优势在于以后遍历时可以看到遍历到第几个元素;

注意:

头插法你输入 1 2 3 4 5 6

其实数据是以6 5 4 3 2 1的方式进行存储的,好比我们把没输入进去新的数字插入到值之前数据的前面的意思;

尾插法:

和头插法的不一样就是把输入的新的数据插入到以前数据的后面

:输入 12 3 4 5 6

就是以1 2 3 4 5 6的方式存储的

void createHeadList()
{int n;Node * head, *tail, *p;//tail是一个尾指针//创建头结点head = (Node *)malloc(sizeof(node));head->next = NULL;//while(scanf("%d",&n) == 1){p = (Node *)malloc(sizeof(node));p->data = n;p->next =NULL;//p默认是我们的最后一个数据 所以他的尾部为空tail->next = p;这里注意区分和头插法的区别,tail是我们设置的尾指针 用来一直指向链表的末尾tail = p;}return head;
}

接下来的操作是建立在熟悉创建链表的基础上

void printlink(Node *head)//打印链表
{Node *p;p=head->next;while(p!=NULL)//是否到结尾{puts(p->name);p=p->next;}
}int lenlink(Node *head)//求链表的长度
{int len;Node *p;for(len=0,p=head->next;p!=NULL;len++)//先给p赋值首个元素;p=p->next;//p指向下一个元素;return len;
}//插入节点
void sertlink(Node *head,Node *p, int i)//q指向第i个节点,指针p指向需要插入的节点,p带来的是新的节点注意以下的注释
{Node *q;int n=0;for(q=head; n<i&&q->next!=NULL; n++){q = q->next;p->next = q->next;// 链接后面的指针,将插入的节点和之前的进行												

单链表的基本操作及尝试-插入排序相关推荐

  1. 链表的基本操作 java_详细实现单链表的基本操作【Java版】

    节点类 static Node head=new Node(); static class Node{ int data; Node next; public Node() {//无参构造方法,默认d ...

  2. 链表c++语言 解析,C++ 单链表的基本操作(详解)

    链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...

  3. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置

    ** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...

  4. 数据结构实验3、单链表的基本操作实现

    实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...

  5. 单链表的基本操作代码实现(C语言版)

    目录 前言: 单链表的基本操作 准备工作(头文件.各种宏定义以及结构体定义) 一.较简单操作 1.单链表的初始化 2.判断单链表是否为空表 3.单链表的销毁 4.单链表的清空 5.求单链表的表长 二. ...

  6. 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)

    目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...

  7. 单链表的基本操作,建立单链表,插入删除等

    这里主要写了相关的单链表的一些基本操作,是关于代码的,有什么不对的可以跟我在评论区讨论呀 #include<iostream>using namespace std;//单链表typede ...

  8. 算法创作|单链表的基本操作

    本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 单链表是链表的一种,是一种链式存取的数据结构.用一组地址任意的存储单元存放线性表中的数据元素 ...

  9. 单链表的基本操作(初始化,前插,后插,删除查找,排序)

    /*        // Project: single linkeed list (数据结构 单链表)        // Date:    2021-10-7 09:26:57       // ...

最新文章

  1. html中隐藏溢出怎么写,html-如何隐藏表行溢出?
  2. Swift3.0语言教程使用占位符格式创建和初始化字符串
  3. python常用内建函数
  4. OpenGL编程指南13:光源移动
  5. python统计窗口函数怎么处理_python时间序列:移动窗口函数前篇
  6. boost::mp11::mp_copy_if相关用法的测试程序
  7. NDK Socket编程:面向连接的通信(tcp)
  8. 我们为什么要搞长沙.NET技术社区(三)
  9. C#使用Redis集群缓存
  10. 【APICloud系列|34】免费使用的ChromeDebug 模块
  11. HTTP--历史、组件系统
  12. rzsz上传下载命令
  13. UI设计素材 | 多用途APP项目管理移动应用UI套件
  14. Android集成JPush(极光推送)
  15. Java基础复习---线程创建
  16. Android 打开蓝牙流程
  17. C语言也能干大事第十三节(如鹏基础)
  18. 【sklearn下的SVM转onnx】
  19. 正则匹配某字符前的内容
  20. RelativeLayout 设置控件在最上层

热门文章

  1. 全国计算机二级和四川省计算机二级,省级计算机二级证书和全国计算机二级证书的区别...
  2. 用户运营的目标是什么?
  3. java客户管理系统
  4. 2022亚太杯C题完整原创成品来啦!
  5. uc os ii与linux,uC/OS-II嵌入式实时操作系统的几大特点
  6. 树莓派安装opencv
  7. 商业经营的税费有哪些?
  8. 大数据机器学习的职业发展与薪资状况
  9. QG工作室2012年招新通知(附报名表)
  10. 微信小程序中搜索框中字体颜色样式如何改变