第一关:干掉链表这个小喽啰

文章目录

  • 第一关:干掉链表这个小喽啰
    • 前备知识:
    • 具体代码实现
      • 单链表
      • 循环链表
      • 双向循环链表
    • 相关习题:

前备知识:

链表作为线性数据结构的一种,提它之前必须得讲下:顺序表(也就是一个个结点的地址是连续的存储在一起的),这样可能比较抽象:其实也就是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;
}

建议少用拼音命名法…,这样太没技术含量了,计算机相关英语还是挺少的,我这种四级飘过的都不觉得难,你们就更不用说了

循环链表

双向循环链表

这两个实现起来都还是有点困难的,考虑大家难以接受,我就自己没有写代码了,但是担心大佬们吃不饱,准备了下面博客:
带头结点的双向链表的基本操作

相关习题:

前面那些操作都可以说比较抽象的,到具体问题下,该怎么思考和求解呢?

  1. HNUCM-OJ 1225:链表的基本操作
  2. HNUCM-OJ 1227:双向循环链表
  3. 拼题A:带头结点的链式表操作集 (20分)

其实做个第一题也就差不多了

关于第一题的答案,之前有写过一篇博客,大家感兴趣也可以看看:
单链表基本操作整合

链表这一关到这,也就基本上算闯关成功了,至于是否能拿MVP就看大家了

第一关:干掉链表这个小喽啰相关推荐

  1. 封神台——第一关:为了女神小芳

    题目:获取数据库管理员密码 方法一: 这里我用的是kali虚拟机进行的渗透测试 步骤一: 点击"点击查看新闻"超链接,跳转到一个页面,url发生改变,设想这个页面存在sql漏洞. ...

  2. 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 002第一关:关闭卡死的电脑

    昨天做了主画面的选择,今天做第一关的关闭卡死的电脑,这个小游戏,这个游戏是很多的小游戏组合起来的,所以我们逐个击破,第一个游戏到底要如何做呢? 看看今天实现第一关的效果 这个第一个游戏不算太难 首先我 ...

  3. sqlilabs第一关懵逼小解答

    1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐.左为sqlilabs第一关,右为burpsuite. 2.输入?id=1 and 1=1 与?id=1 and 1=2试试 可 ...

  4. java小游戏超级玛丽:05.第一关的设计

    第一关效果图: 目录 判断是否为第一关 绘制第一关的场景 绘制地面(for循环) 绘制砖块 绘制水管 生成Obstatic列表的getter方法 绘制障碍物 判断是否为第一关 if(sort == 1 ...

  5. SQL注入之union联合注入——sql-lab第一关(非常非常详细的过程)

    SQL注入介绍 什么是SQL注入: SQL注入是(SQLi)是一种注入攻击,可以执行恶意的SQL语句,它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制web应用程序后面的数据库服务器.攻击者 ...

  6. qt 3d迷宫游戏_Steam上最硬核的恐怖游戏?玩家耗时一个月才通第一关!

    说到恐怖游戏,游戏日报漆木第一时间想到的便是<逃生>系列.<层层恐惧>.<寂静岭>等.他们的共同特点无非就是恐怖,但难度都比较适中,主要体现在解密方面.而今天为大家 ...

  7. Python GUI篇——关不掉的小窗口

    Python GUI篇--关不掉的小窗口 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高 ...

  8. upload-labs之第一关

    一.靶场简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场.旨在帮助大家对上传漏洞有一个全面的了解.目前一共20关,每一关都包含着不同上传方式. ...

  9. code combat计算机科学三第一关,Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学三)Ⅰ...

    第一关:友和敌 // 农民和差役聚集在森林里. // 命令农民战斗,差役滚开! while (true) { var friend = hero.findNearestFriend(); if (fr ...

最新文章

  1. Chem. Commun. | 利用基于迁移学习策略的transformer 模型进行Heck反应预测
  2. linux释放内存命令
  3. Caffe + windows + python3.5安装
  4. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
  5. Oracle常用数据字典表 Oracle常用数据字典表 查看当前用户的缺省表空间
  6. 接口implements(Java)
  7. keil4如何将c语言转换成汇编语言_keil中怎么在c语言里嵌入汇编语言
  8. caffe中Makefile.config配置
  9. 替代NXP的CLRC663国产芯片来了,再也不用被老外卡脖子了
  10. linkboy带你点亮LED创意世界
  11. 建立一个被称为sroot()的函数,返回其参数的二次方根,重载sroot()三次,让它返回整数,长整数与双精度的二次方根
  12. CDH 6系列(CDH 6.0.0、CHD 6.1.0等)安装和使用
  13. Android系统架构及生态链
  14. HTML5期末大作业:出行网站设计——西安旅游-高质量(9页) HTML+CSS+JavaScript 学生DW网页设计
  15. 汽车之家APP车型口碑--参数分析
  16. 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
  17. 阿里智能运维平台的演进:从自动化到无人化(附PPT)
  18. Tomcat 如何查看端口
  19. Java 小白 interface 与 implements 创建老师类和学生类,两个类都实现了问候接口和工作接口,模拟上课的场景
  20. 有关英文单词中间有空格问题的解决

热门文章

  1. 刷magisk模块后不能开机_刷 Magisk 模块手机「变砖」了?这三款工具能帮你救急...
  2. 怎样做一个好的PPT演讲
  3. 移动端分享插件js - soshm.min.js
  4. 喜事一桩|派盾科技荣获2020年杭州高新区“5050计划”政策扶持
  5. 实现分页列表跨页全选
  6. win7家庭版远程桌面补丁_无需惊慌!微软漏洞数月后再被“预警” 打补丁即可防御...
  7. 170828 WarGames-Narnia(3)
  8. Python悬浮可移动置顶计时软件AttentionPlease
  9. 诺瓦科技--测试开发工程师(7.12)
  10. [Android] 能用的QQ轻聊版,3.7.1 安装后占用 36M 界面简洁,启动速度快