原始题目

题题目描述

链表是数据结构中一种最基本的数据结构,它是用链式存储结构实现的线性表。它较顺序表而言在插入和删除时不必移动其后的元素。现在给你一些整数,然后会频繁地插入和删除其中的某些元素,会在其中某些时候让你查找某个元素或者输出当前链表中所有的元素。

输输入

输入数据只有一组,第一行有n+1个整数,第一个整数是这行余下的整数数目n,后面是n个整数。这一行整数是用来初始化列表的,并且输入的顺序与列表中的顺序相反,也就是说如果列表中是1、2、3那么输入的顺序是3、2、1。

第二行有一个整数m,代表下面还有m行。每行有一个字符串,字符串是“get”,“insert”,“delete”,“show”中的一种。如果是“get”或者“delete”,则其后跟着一个整数a,代表获得或者删除第a个元素;如果是“insert”,则其后跟着两个整数a和e,代表在第a个位置前面插入e;“show”之后没有整数。

输输出

如果获取成功,则输出该元素;如果删除成功则输出“delete OK”;如果获取失败或者删除失败,则输出“get fail”以及“delete fail”。如果插入成功则输出“insert OK”,否则输出“insert fail”。如果是“show”则输出列表中的所有元素,如果列表是空的,则输出“Link list is empty”。注:所有的双引号均不输出。

样样例输入 

3 3 2 1 21 show delete 1 show delete 2 show delete 1 show delete 2 insert 2 5 show insert 1 5 show insert 1 7 show insert 2 5 show insert 3 6 show insert 1 8 show get 2

样样例输出 复制

1 2 3 delete OK 2 3 delete OK 2 delete OK Link list is empty delete fail insert fail Link list is empty insert OK 5 insert OK 7 5 insert OK 7 5 5 insert OK 7 5 6 5 insert OK 8 7 5 6 5 7

分析:

大模拟作业,用自定义的链表结构来进行操作即可。

有个坑点,输入的进行操作的位置数可能是小于1(不合法的),要进行特判

另外为了不用多余代码,插入了一个虚拟头结点,其值为-1,方便删除真正的头元素,从其之后进行操作即可。

AC代码:

// Problem: B: 算法2-8~2-11:链表的基本操作
// Contest: BUCTOJ
// URL: https://buctoj.com/problem.php?cid=2759&pid=1
// Memory Limit: 32 MB
// Time Limit: 1000 ms#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
const int N = 2e5 + 10;
const int MOD = 1e9 + 7;
#define endl '\n'
#define PY puts("Yes")
#define PN puts("No")
struct MyList
{MyList(){val = 0;next = nullptr;}MyList(int x){val = x;next = nullptr;}int val;MyList *next;
};
int main()
{ios::sync_with_stdio(false);cin.tie(0);int n;cin >> n;vector<int> raw_input(n);for (int i = 0; i < n; i++)cin >> raw_input[i];reverse(raw_input.begin(), raw_input.end());MyList *head = new MyList(-1);MyList *p = head;for (int i = 0; i < n; i++){MyList *cur = new MyList(raw_input[i]);p->next = cur;p = p->next;}int m;cin >> m;while (m--){string s;cin >> s;if (s == "show"){p = head->next;if (!p){cout << "Link list is empty" << endl;continue;}while (p){cout << p->val << " ";p = p->next;}cout << endl;}else if (s == "delete"){p = head;int cnt = 1;int m;cin >> m;while (p && cnt < m){p = p->next;cnt++;}if (m < 1 || !p || !p->next){cout << "delete fail" << endl;continue;}p->next = p->next->next;cout << "delete OK" << endl;}else if (s == "insert"){p = head;int cnt = 1;int a, m;cin >> m >> a;while (p && cnt < m){p = p->next;cnt++;}if (m < 1 || !p){cout << "insert fail" << endl;continue;}MyList *newcreate = new MyList(a);newcreate->next = p->next;p->next = newcreate;cout << "insert OK" << endl;}else if (s == "get"){p = head->next;int cnt = 1;int m;cin >> m;while (p && cnt < m){p = p->next;cnt++;}if (m < 1 || !p){cout << "get fail" << endl;continue;}cout << p->val << endl;}}return 0;
}

【BUCTOJ】链表的基本操作相关推荐

  1. 数据结构之【线性表】(顺序表、链表的基本操作实现)

    概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...

  2. 链表的基本操作 java_详细实现单链表的基本操作【Java版】

    节点类 static Node head=new Node(); static class Node{ int data; Node next; public Node() {//无参构造方法,默认d ...

  3. 链表c++语言 解析,C++ 单链表的基本操作(详解)

    链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...

  4. 《剑指offer》第二章小结(1)——链表的基本操作

    <剑指offer>第二章小结(1)--链表的基本操作 面试题5是从尾到头打印链表,与此相关的链表的基本操作应该知道. 下面代码中列举了单链表的创建.遍历.插入和删除四种操作.参考网址: h ...

  5. 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)

    链表的基本操作(C语言)详解 #include <stdio.h> #include <stdlib.h>typedef struct Link{int elem;struct ...

  6. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置

    ** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...

  7. 【C++】链表及基本操作

    链表及基本操作 定义 基本操作 1. 创建单链表 2. 插入节点 3. 删除节点 4. 反转链表 5. 倒数第K个节点 6. 是否有环 本文所述均为单向链表. ps:更多数据结构知识详见: 常见数组结 ...

  8. 入门:链表的基本操作

    入门:链表的基本操作 标签:C语言 链表 By 小威威 1.写这篇博文的原因 C语言有三大重要部分:流程控制.函数.指针. 对于指针,单单了解它的简单应用是不够的,最重要的还是学习链表.许多参考书对链 ...

  9. 【Java】链表的基本操作

    链表主要是为了弥补一些顺序表的缺点: 顺序表的插入删除操作时间复杂度为 O(N) 增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗 增容一般都是成2倍增长,会浪费一定的空间 为了解决以上问题引 ...

最新文章

  1. rpa操作excel_RPA的功能与技术剖析
  2. git/github 生成密钥
  3. HelloWorld实例(springmvc版)
  4. ajax的url可以用变量吗6,如何使用变量设置 Ajax Url
  5. ad中电容用什么封装_用什么来降低噪声?只要几个电容器就可以,简单有效!...
  6. drools 7.x-复杂事件处理入门
  7. 89c52串口发送接收小示例
  8. 动态SQL和PL/SQL的EXECUTE IMMEDIATE选项
  9. 小白程序员该看什么书?书单推荐
  10. MATLAB安装破解教程(内涵所需文件)
  11. 微信文章搜索工具, 推荐使用它,简单好用
  12. 学计算机独显重要吗,“集显”、“独显”对于普通电脑用户来说还那么重要吗?...
  13. Unicode双向算法详解(bidi算法)(二)
  14. PHP 的__call()
  15. 64位Slitaz Linux下Glibc 2.20编译式更新安装成功
  16. MOOC(幕课)的到来!
  17. 离线安装Chrome Postman 插件
  18. 计算机图形学【GAMES-101】9、蒙特卡洛路径追踪(Path Tracing)(光源采样)
  19. 基于控制台的JAVA购物系统
  20. 【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战

热门文章

  1. 如何打印菱形图案(C语言)
  2. linux音频子系统 - pcm设备
  3. rep()函数的学习
  4. 老挑毛 win7 linux,老挑毛u盘装系统步骤|老挑毛u盘一键装系统
  5. onenote正在与服务器联系以获取信息,随时记录重要信息 – OneNote
  6. 三菱plc pwm指令_三菱PLC的MPS、MRD、MPP指令用法
  7. 计算机1M代表什么,1M等于多少kb?KB MB GB TB 各是什么意思?
  8. Z05 - 006、网站转化以及漏斗分析(转化分析)
  9. 深度调查:危险的“360安全卫士”!
  10. ESP8266-Arduino编程实例-LPS25H压阻式压力传感器驱动