第一关:干掉链表这个小喽啰
第一关:干掉链表这个小喽啰
文章目录
- 第一关:干掉链表这个小喽啰
- 前备知识:
- 具体代码实现
- 单链表
- 循环链表
- 双向循环链表
- 相关习题:
前备知识:
链表作为线性数据结构的一种,提它之前必须得讲下:顺序表(也就是一个个结点的地址是连续的存储在一起的),这样可能比较抽象:其实也就是C语言学的数组(这其中就包括了:普通数组和结构体数组)
而链表有什么区别呢?
链表相对于数组而言,引入了指针,这样就实现了:即使相邻的结点在计算机内存的地址不连续,但是可以通过指针实现两个结点的连接(这好像不是我要讲的,哈哈哈)
具体代码实现
单链表
单链表分类:
1.带头结点的单链表
2.不带头结点的单链表
也就是上图中的a1直接做链表头部
带头结点的单链表在链表相关操作时,要比不带头结点的单链表要好,所以一般建单链表都选择带头结点
为什么呢要好呢?
主要区别在于第一个结点的操作,以插入为例:如果没有头结点的话,第一个结点就是当前链表的头;而有头结点的话,第一个结点的插入也就和其他结点插入相同,这样就不需要特判了(如果还不懂,建议画一下图哦)
综上:我们尽量选择带头结点的链表
- 链表插入两种方法
1.头插法
2.尾插法
书上有非常详细的代码,如果还是不是很懂的话,推荐下面博客:
头插法和尾插法图文并茂
插入操作解决了后,其他操作也就相对来说比较简单了,可以看看下面代码,这是我大一写的,如果不懂的话,欢迎在下面留言,当然也可以加我QQ私聊哦(哈哈)
带头结点的尾插法单链表相关操作:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
typedef struct node
{int data;struct node *next;
} LNode,*LinkList;
LinkList L;
LNode *head=(LNode *)malloc(sizeof(LNode));
LNode *creat_L()
{L=head;LNode *r=head;printf("请输入数字用以创建链表,输入0结束\n");int num;scanf("%d",&num);while(num!=0){LNode *p=(LNode*)malloc(sizeof(LNode));p->data=num;r->next=p;r=p;scanf("%d",&num);}r->next=NULL;return L;
}
void show_L(LinkList L)
{if(L->next==NULL){printf("Link is empty");}else{LNode *p=L->next;printf("%d",p->data);while(p->next!=NULL){p=p->next;printf(" %d",p->data);}printf("\n");}
}
LNode *get_L(LinkList L,int location)
{LNode *p=L;int i=0;while(p->next!=NULL&&i<location){p=p->next;i++;}if(i==location)return p;elsereturn NULL;
}
int delete_L(LinkList L,int location)
{LNode *p,*s;p=get_L(L,location-1);if(p==NULL||p->next==NULL)return 0;else{s=p->next;p->next=s->next;free(s);return 1;}
}
int insert_L(LinkList L,int location,int num)
{LNode *p,*s;p=get_L(L,location-1);if(p==NULL)return 0;else{s=(LNode *)malloc(sizeof(LNode));s->data=num;s->next=p->next;p->next=s;return 1;}
}
int main()
{L=creat_L();char str[20];printf("请输入相关指令,包括:insert,show,delete,get\n");while(~scanf("%s",str)){if(strcmp(str,"insert")==0){printf("请输入你所要插入的地址及数值\n");int location;int num;scanf("%d%d",&location,&num);int flag=insert_L(L,location,num);if(flag==1){printf("insert OK\n");printf("插入成功,插入后的链表为:\n");show_L(L);}elseprintf("insert fail\n");}if(strcmp(str,"show")==0){printf("链表为:\n");show_L(L);}if(strcmp(str,"delete")==0){printf("请输入需要删除的位置:\n");int location;scanf("%d",&location);int flag=delete_L(L,location);if(flag==1){printf("delete OK\n");show_L(L);}elseprintf("delete fail\n");}if(strcmp(str,"get")==0){printf("请输入你想要得到数值的位置:\n");int location;scanf("%d",&location);LNode *p=get_L(L,location);if(p==NULL){printf("get fail\n");}else{printf("获取成功,其数值为:\n");printf("%d\n",p->data);}}}return 0;
}
建议少用拼音命名法…,这样太没技术含量了,计算机相关英语还是挺少的,我这种四级飘过的都不觉得难,你们就更不用说了
循环链表
双向循环链表
这两个实现起来都还是有点困难的,考虑大家难以接受,我就自己没有写代码了,但是担心大佬们吃不饱,准备了下面博客:
带头结点的双向链表的基本操作
相关习题:
前面那些操作都可以说比较抽象的,到具体问题下,该怎么思考和求解呢?
- HNUCM-OJ 1225:链表的基本操作
- HNUCM-OJ 1227:双向循环链表
- 拼题A:带头结点的链式表操作集 (20分)
其实做个第一题也就差不多了
关于第一题的答案,之前有写过一篇博客,大家感兴趣也可以看看:
单链表基本操作整合
链表这一关到这,也就基本上算闯关成功了,至于是否能拿MVP就看大家了
第一关:干掉链表这个小喽啰相关推荐
- 封神台——第一关:为了女神小芳
题目:获取数据库管理员密码 方法一: 这里我用的是kali虚拟机进行的渗透测试 步骤一: 点击"点击查看新闻"超链接,跳转到一个页面,url发生改变,设想这个页面存在sql漏洞. ...
- 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 002第一关:关闭卡死的电脑
昨天做了主画面的选择,今天做第一关的关闭卡死的电脑,这个小游戏,这个游戏是很多的小游戏组合起来的,所以我们逐个击破,第一个游戏到底要如何做呢? 看看今天实现第一关的效果 这个第一个游戏不算太难 首先我 ...
- sqlilabs第一关懵逼小解答
1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐.左为sqlilabs第一关,右为burpsuite. 2.输入?id=1 and 1=1 与?id=1 and 1=2试试 可 ...
- java小游戏超级玛丽:05.第一关的设计
第一关效果图: 目录 判断是否为第一关 绘制第一关的场景 绘制地面(for循环) 绘制砖块 绘制水管 生成Obstatic列表的getter方法 绘制障碍物 判断是否为第一关 if(sort == 1 ...
- SQL注入之union联合注入——sql-lab第一关(非常非常详细的过程)
SQL注入介绍 什么是SQL注入: SQL注入是(SQLi)是一种注入攻击,可以执行恶意的SQL语句,它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制web应用程序后面的数据库服务器.攻击者 ...
- qt 3d迷宫游戏_Steam上最硬核的恐怖游戏?玩家耗时一个月才通第一关!
说到恐怖游戏,游戏日报漆木第一时间想到的便是<逃生>系列.<层层恐惧>.<寂静岭>等.他们的共同特点无非就是恐怖,但难度都比较适中,主要体现在解密方面.而今天为大家 ...
- Python GUI篇——关不掉的小窗口
Python GUI篇--关不掉的小窗口 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高 ...
- upload-labs之第一关
一.靶场简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场.旨在帮助大家对上传漏洞有一个全面的了解.目前一共20关,每一关都包含着不同上传方式. ...
- code combat计算机科学三第一关,Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学三)Ⅰ...
第一关:友和敌 // 农民和差役聚集在森林里. // 命令农民战斗,差役滚开! while (true) { var friend = hero.findNearestFriend(); if (fr ...
最新文章
- Chem. Commun. | 利用基于迁移学习策略的transformer 模型进行Heck反应预测
- linux释放内存命令
- Caffe + windows + python3.5安装
- 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
- Oracle常用数据字典表 Oracle常用数据字典表 查看当前用户的缺省表空间
- 接口implements(Java)
- keil4如何将c语言转换成汇编语言_keil中怎么在c语言里嵌入汇编语言
- caffe中Makefile.config配置
- 替代NXP的CLRC663国产芯片来了,再也不用被老外卡脖子了
- linkboy带你点亮LED创意世界
- 建立一个被称为sroot()的函数,返回其参数的二次方根,重载sroot()三次,让它返回整数,长整数与双精度的二次方根
- CDH 6系列(CDH 6.0.0、CHD 6.1.0等)安装和使用
- Android系统架构及生态链
- HTML5期末大作业:出行网站设计——西安旅游-高质量(9页) HTML+CSS+JavaScript 学生DW网页设计
- 汽车之家APP车型口碑--参数分析
- 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
- 阿里智能运维平台的演进:从自动化到无人化(附PPT)
- Tomcat 如何查看端口
- Java 小白 interface 与 implements 创建老师类和学生类,两个类都实现了问候接口和工作接口,模拟上课的场景
- 有关英文单词中间有空格问题的解决
热门文章
- 刷magisk模块后不能开机_刷 Magisk 模块手机「变砖」了?这三款工具能帮你救急...
- 怎样做一个好的PPT演讲
- 移动端分享插件js - soshm.min.js
- 喜事一桩|派盾科技荣获2020年杭州高新区“5050计划”政策扶持
- 实现分页列表跨页全选
- win7家庭版远程桌面补丁_无需惊慌!微软漏洞数月后再被“预警” 打补丁即可防御...
- 170828 WarGames-Narnia(3)
- Python悬浮可移动置顶计时软件AttentionPlease
- 诺瓦科技--测试开发工程师(7.12)
- [Android] 能用的QQ轻聊版,3.7.1 安装后占用 36M 界面简洁,启动速度快