单链表的基本操作及尝试-插入排序
在前两周我接触了一个让人头疼的东西-链表;
链表简单的说就是创建一个结构体,然后将这些每个数据存入到一个结构体里面去,通过指针的方法将这些结构体连接起来,一环扣一环,就成为了链表
官方概念
首先何谓链表?
链式存储的线性表,简称链表。链表由多个链表元素组成,这些元素称为节点。结点之间通过逻辑连接,形成链式存储结构。存储结点的内存单元,可以是连续的也可以是不连续的。逻辑连接与物理存储次序没有关系。
链表分为两个域:
值域:用于存放结点的值
链域:用于存放下一个结点的地址或位置
简单的介绍:
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;// 链接后面的指针,将插入的节点和之前的进行
单链表的基本操作及尝试-插入排序相关推荐
- 链表的基本操作 java_详细实现单链表的基本操作【Java版】
节点类 static Node head=new Node(); static class Node{ int data; Node next; public Node() {//无参构造方法,默认d ...
- 链表c++语言 解析,C++ 单链表的基本操作(详解)
链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...
- 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置
** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...
- 数据结构实验3、单链表的基本操作实现
实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...
- 单链表的基本操作代码实现(C语言版)
目录 前言: 单链表的基本操作 准备工作(头文件.各种宏定义以及结构体定义) 一.较简单操作 1.单链表的初始化 2.判断单链表是否为空表 3.单链表的销毁 4.单链表的清空 5.求单链表的表长 二. ...
- 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)
目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...
- 单链表的基本操作,建立单链表,插入删除等
这里主要写了相关的单链表的一些基本操作,是关于代码的,有什么不对的可以跟我在评论区讨论呀 #include<iostream>using namespace std;//单链表typede ...
- 算法创作|单链表的基本操作
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 单链表是链表的一种,是一种链式存取的数据结构.用一组地址任意的存储单元存放线性表中的数据元素 ...
- 单链表的基本操作(初始化,前插,后插,删除查找,排序)
/* // Project: single linkeed list (数据结构 单链表) // Date: 2021-10-7 09:26:57 // ...
最新文章
- html中隐藏溢出怎么写,html-如何隐藏表行溢出?
- Swift3.0语言教程使用占位符格式创建和初始化字符串
- python常用内建函数
- OpenGL编程指南13:光源移动
- python统计窗口函数怎么处理_python时间序列:移动窗口函数前篇
- boost::mp11::mp_copy_if相关用法的测试程序
- NDK Socket编程:面向连接的通信(tcp)
- 我们为什么要搞长沙.NET技术社区(三)
- C#使用Redis集群缓存
- 【APICloud系列|34】免费使用的ChromeDebug 模块
- HTTP--历史、组件系统
- rzsz上传下载命令
- UI设计素材 | 多用途APP项目管理移动应用UI套件
- Android集成JPush(极光推送)
- Java基础复习---线程创建
- Android 打开蓝牙流程
- C语言也能干大事第十三节(如鹏基础)
- 【sklearn下的SVM转onnx】
- 正则匹配某字符前的内容
- RelativeLayout 设置控件在最上层
热门文章