SDUTOJ 2116 数据结构实验之链表一:顺序建立链表

2024-08-24 23:18

本文主要是介绍SDUTOJ 2116 数据结构实验之链表一:顺序建立链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近数据结构和c++相结合的实训正在进行,鉴于一些同学还不是太懂链表,写一篇博客讲解一下,若是哪里有问题,请不吝支出,在此谢过,若是过路的大神看见了,求轻喷。。。。

说白了,链表就是个特殊的结构体数组,只不过数组是用下标找到某个节点的后继节点,而链表使用一个指向他身类型的指针来记录下一个节点的地址,就比如你进入了一个村庄,你发现这里住的楼的楼号(1,2,3,4,等)都是连着的,这就是结构体数组,而链表就是你从第一楼开始,看到的是本楼的标号,然后标号下面还有一行字:下一个楼是XXX,他在某某某地方,当你找到XXX后,XXX的楼的标号下面也有一行字:下一个楼是YYY,他在另一个某某某地方,你每次都能从这个楼的标号上找到下一个楼在哪,直到最后一栋楼上标号下面没有下一个楼的信息,只有一个NULL,那么,你走到楼的最后了。。。链表遍历完了。。。。。


这里以SDUTOJ的2116题为例,讲解一下链表,另外,链表是写出来的,练出来的,不写,不编译运行,不调试,永远学不会链表,所以不要光看,要用编译器写,然后提交到OJ上去判,才能学会,这是这个题的链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2116

数据结构实验之链表一:顺序建立链表

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。

输入

第一行输入整数的个数N;
第二行依次输入每个整数。

输出

输出这组整数。

示例输入

8
12 56 4 6 55 15 33 62

示例输出

12 56 4 6 55 15 33 62

提示

不得使用数组!

来源

示例程序

#include <iostream>using namespace std;class List
{public:int data;//数据域,用来记录数据List *next;//指着域,用来记录它下一个节点的地址//访问这个变量能找到它的下一个节点
};void del(List *p)//递归释放内存
{if(p == NULL)//p为NULL说明p访问到链表结尾了return ;//访问到结尾返回del(p->next);//如果没访问到结尾,会在这里一直调用函数本身递归,直到遇见NULLdelete p;//遇到NULL返回到head的时候,从后向前删除节点,释放内存//如果从前面删除的话就会把本节点的next值也给删除了,就没办法访问到下一个节点了//如果定义一个临时变量先记录下一个节点地址然后再删除本节点也是可以解决这个问题的
}
//void del(List *head)
//{
//    List *p = head,*q;
//    while(p)
//    {
//        q = p;
//        p = p->next;
//        delete q;
//    }
//}//这样释放内存也是可以的
int main()
{List *head = new List;//new开辟内存,地址赋给head,head代表这个//链表的头,访问head能找到这个链表head->next = NULL;//初始状态下只有head链节,他没有后继结点,所以他的next值为NULL(空)List *p,*q;//p是游动指针,建立链表的时候永远指向最后一个链节//q是开新内存用的,也就是增加一个新的链节int n;//输入数的个数cin>>n;p = head;//初始状态下只有head一个链节,那么最后一个链节也是head,让p指向headfor(int i = 0;i < n;i++){q = new List;//增加新的链节qcin>>q->data;//给新链节的data赋值p->next = q;//把q挂在p(初始值是head)的后面q->next = NULL;//新链节是链表的最后一个链节,后面没有后继,那么,就把他的next值设为NULL(空)p = q;//q成为p的后继之后,q就是最后一个节点,我们规定p指向最后一个节点,这里就把q赋给p}//循环完成后,链表就建立完了,head是他们的头p = head->next;//p在上面是指向最后一个元素,以便于增加新的链节后能很快的放在它的后面,达到添加链节的目的//现在我们就发动他的游动特点,来访问整个链表,从上面看来,我们输入的第一个整数放在q->data//里面了,并没有放在head里面,那么,我们访问的话,head的下一个节点才是第一个存储节点,用p//访问head的next,判就指向了链表中的第一个存储输入数的节点(真正第一个节点是head,因为head//因为head的data没有值,所以,我们说head的后面第一个节点为有效节点)while(p != NULL)//当p访问不到NULL的时候,就会一直循环,NULL是链表结束的标志{cout<<p->data;//输出p访问到的每个节点的data值if(p->next != NULL)cout<<" ";//这两行是调格式的,为了能在最后不多输出空格,其实只是为了在OJ上ACp = p->next;//p访问把本节点的next值,p就指向下一个节点,相当于向后移动一个节点}cout<<endl;del(head);//释放内存return 0;
}




这篇关于SDUTOJ 2116 数据结构实验之链表一:顺序建立链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-