数据链表---单链表(1)

2024-01-08 02:30
文章标签 单链 数据链

本文主要是介绍数据链表---单链表(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据链表

1. 单链表

单链表实际内存布局图

在这里插入图片描述

单链表逻辑结构示意图

在这里插入图片描述

链表是一个有序的列表
头指针为150,指向地址为150的节点,可以读取data域和next域,其next域为110,又会指向地址为110的节点,以此类推。
在这里插入图片描述

小结

1:链表以节点方式存储,是链式存储
2:每个节点包含data域,next域,data域用来存数据,next域指向下一个节点
3:如上图发现:链表的各个节点不一定是连续存储
4:链表分带头节点的链表和没有头节点的链表

2.应用实例
使用带head头的单向链表实现水浒英雄排行榜的管理
(1)第一种方法添加英雄直接添加到链表尾部
(2)第二种方法根据排名将英雄插入到指定位置

添加思路:①先创建一个head头节点,作用是表示单链表的头
②后面我们每添加一个节点,就直接加入到链表的最后
在这里插入图片描述

class Heronode{int no;String name;String nickname;HeroNode next;}

代码实现


public class 链表 {public static void main(String[] args) {//进行测试先创建节点HeroNode hero1=   new HeroNode(1,"宋江","及时雨");HeroNode hero2=new HeroNode(2,"卢俊义","玉麒麟");HeroNode hero3=new HeroNode(3,"吴用","智多星");//先创建一个链表,加入SingleLinkedList singleLinkedList=new SingleLinkedList();singleLinkedList.add(hero1);singleLinkedList.add(hero2);singleLinkedList.add(hero3);//显示singleLinkedList.list();}
}//定义SingleLinkedList管理英雄
class SingleLinkedList{//初始化头节点,不要动,不存放具体数据private HeroNode head=new HeroNode(0,"","");//添加节点到单向链表//思路:当不考虑编号顺序时:找到当前链表的最后节点//将最后这个节点的next指向新的节点public void add(HeroNode heroNode){//因为head节点不能动,因此我们需要一个辅助变量temp,指向头节点HeroNode temp=head;//遍历链表,找到最后while(true){//找到链表的最后if(temp.next==null){break;}//没有找到temp后移temp=temp.next;}//当退出while循环时,temp就指向了链表最后temp.next=heroNode;}//验证:显示链表【遍历】public void list(){//判断链表是否为空if(head.next==null){System.out.println("链表为空");return ;}//因为头节点不能动,需要一个辅助变量来遍历HeroNode temp=head.next;while(true){//是否到链表最后if(temp==null){break;}//输出节点的信息System.out.println(temp);//将temp后移temp=temp.next;}}
}//定义HeroNode,每个HeroNode对象就是一个节点
class HeroNode{public int no;public String name;public String nickname;public HeroNode next;//构造器public HeroNode(int no, String name, String nickname) {this.no = no;this.name = name;this.nickname = nickname;}//为了显示方法,重写toString方法@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name  +", nickname='" + nickname ;}
}

这篇关于数据链表---单链表(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582033

相关文章

Go语言构建单链表

package mainimport "fmt"type ListNode struct {Val intNext *ListNode}func main() {list := []int{2,4,3}head := &ListNode{Val:list[0]}tail := head //需要头尾两个指针for i:=1;i<len(list);i++ {//方法一 数组直接构建链表tai

[数据结构]线性表之单链表的类模板实现

类的具体实现如下: /#include"LinearList.h"#include <iostream>#include <cstdlib>using namespace std;template<class T>struct LinkNode //链表节点类{T data;LinkNode<T>* link;LinkNode(LinkNode<T>* ptr=NULL):

逆序和顺序创建单链表

单链表是一种顺序的存储方式,数据结构学的不好,考研又是必考内容,只好从头开始学习,相信不断地积累会有更好的爆发! 首先单链表的创建,单链表是建立在结构体的基础上,要创建单链表首先要建立起一个储存数据的结构体: struct node{int elem;node *next;};elem是数据域,用来存放你要输入的数据,next是指向下个存放数据节点的指针同为node 类型; 下面是

单链表核心操作代码

头插法建立单链表 代码: void createListByHead(LinkList &L,int n){LNode *s;//移动指针s int x;//要插入的元素 L = (LinkList)malloc(sizeof(LNode));//创建头结点 L->next=NULL;//初始化头结点 for(int i=0;i<n;i++){scanf("&d",&x);//输入要插入的值

浅谈单链表与双链表的区别

数组的优点 随机访问性强(通过下标进行快速定位) 查找速度快 数组的缺点 插入和删除效率低(插入和删除需要移动数据) 可能浪费内存(因为是连续的,所以每次申请数组之前必须规定数组的大小,如果大小不合理,则可能会浪费内存) 内存空间要求高,必须有足够的连续内存空间。 数组大小固定,不能动态拓展 链表的优点 插入删除速度快(因为有next指针指向其下一个节点,通过改变指针的指向可以方便的增加删除元素)

数据结构——单链表查询、逆序、排序

1、思维导图 2、查、改、删算法 //快慢排序法找中间值int mid_link(Link_t *plink){Link_Node_t *pfast = plink->phead;Link_Node_t *pslow = pfast;int m = 0;while(pfast != NULL){pfast = pfast->pnext;++m;if(m % 2 == 0){pslow

数据结构--单链表C/C++

最近在学习数据结构,其中有介绍单链表跟单循环链表的,现在复习一下。首先要定义一下数据结构(节点),如下: typedef int DataType; //方便后面修改数据类型,有点像C++/JAVA中的泛型typedef struct Node {DataType data;struct Node *next;}Node; 单链表:  接下来是定义一个获取链表某个位置节点的函数,如

入门数据结构JAVA DS——如何实现简易的单链表(用JAVA实现)

前言 链表(Linked List)是一种线性数据结构,它由一系列节点组成,每个节点包含两个部分:存储数据的部分和指向下一个节点的指针(或引用)。链表的结构使得它能够动态地增长和收缩,适合在不固定长度的序列中进行插入和删除操作。 链表的基本概念: 节点(Node):链表的基本单位,每个节点包含两个部分: 数据域(Data):存储节点的具体数据。指针域(Pointer/Next):存储指

数据结构——单链表相关操作

zhuzhu1、结构框图: 2、增删改查: 定义链表节点和对象类型 /*************************************************************************> File Name: link.h> Author: yas> Mail: rage_yas@hotmail.com> Created Time: Tue 03 Sep

算法---------数组-----------翻转单链表

题目: 反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出