Acm Club 1326:算法2-8~2-11:链表的基本操作

2023-10-31

题目描述

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

输入格式

输入数据只有一组,第一行有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


就是用链表来操作,直接上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;

typedef int Elemtype;

typedef struct Node{
	Elemtype elem;
	struct Node *next;
}Node, *Linklist;

Status visit(Elemtype e)
{
	printf("%d", e);
	return OK;
}

Status InitLinklist(Linklist *L)
{
	*L = (Linklist)malloc(sizeof(Node));
	if(!(*L))	return ERROR;
	(*L)->next = NULL;
	return OK;
}

Status ListInsert(Linklist *L, int i, Elemtype e)
{
	int j = 1;
	Linklist p, s;
	p = *L;
	while(p && j < i){
		p = p->next;
		++j;
	}
	if(!p || j > i)	return ERROR;
	s = (Linklist)malloc(sizeof(Node));
	s->elem = e;
	s->next = p->next;
	p->next = s;
	return OK;
}

Status ListDelete(Linklist *L, int i, Elemtype *e)
{
	int j = 1;
	Linklist p, q;
	p = *L;
	while(p->next && j < i){
		p = p->next;
		++j;
	}
	if(!(p->next) || j > i)
		return ERROR;
	q = p->next;
	p->next = q->next;
	*e = q->elem;
	free(q);
	return OK;
}

int ListLength(Linklist L)
{
	int i;
	Linklist p;
	i = 0;
	p = L->next;
	while(p){
		i++;
		p = p->next;
	}
	return i;
}

Status ListEmpty(Linklist L)
{
	if(L->next)	return FALSE;
	else return TRUE;
}

Status ClearList(Linklist *L)
{
	Linklist p, q;
	p = (*L)->next;
	while(p){
		q = p->next;
		free(p);
		p = q;
	}
	(*L)->next = NULL;
	return OK;
}

Status GetElem(Linklist L, int i, Elemtype *e)
{
	Linklist p;
	int j;
	j = 1;
	p = L->next;
	while(p && j < i){
		++j;
		p = p->next;
	}
	if(!p || j > i)	return ERROR;
	*e = p->elem;
	return OK;
}

int ElemLocate(Linklist L, Elemtype e)
{
	int i;
	i = 0;
	Linklist p;
	p = L->next;
	while(p){
		i++;
		if(p->elem == e)
			return i;
		p = p->next;
	}
	return 0;
}

Status ListTraverse(Linklist L)
{
	Linklist p;
	p = L->next;
	while(p && p->next != NULL){
		visit(p->elem);
		printf(" ");
		p = p->next;
	}
	visit(p->elem);
	printf("\n");
	return OK;
}

int main()
{
	Linklist L;
	InitLinklist(&L);
	int n;//数字个数
	int nn;//执行命令条数
	int num;//每个数字
	int i = 1;//数字计数单位
	int j;//循环单位
	char str[100];//命令语句
	int loc;//数字位置
	Elemtype e;
	scanf("%d", &n);
	for(j = 0; j < n; j++){
		scanf("%d", &num);
		ListInsert(&L, 1, num);
	}
	scanf("%d", &nn);
	for(j = 0; j < nn; j++){
		scanf("%s", str);
		if(strcmp (str, "show") == 0){
			if(ListEmpty(L)){
				printf("Link list is empty\n");
				continue;
			}
			ListTraverse(L);
		}
		else if(strcmp (str, "delete") == 0){
			scanf("%d", &loc);
			if(ListDelete(&L, loc, &e))
				printf("delete OK\n");
			else
				printf("delete fail\n");
		}
		else if(strcmp (str, "get") == 0){
			scanf("%d", &loc);
			if(GetElem (L, loc, &e)){
				printf("%d\n", e);
			}
			else
				printf("get fail");
		}
		else if(strcmp (str, "insert") == 0){
			scanf("%d%d", &loc, &num);
			if(ListInsert (&L, loc, num))
				printf("insert OK\n");
			else
				printf("insert fail\n");
		}
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Acm Club 1326:算法2-8~2-11:链表的基本操作 的相关文章

随机推荐

  • JDBC纯驱动方式连接MySQL

    1 新建一个名为MysqlDemo的Java Project 2 从http dev mysql com downloads connector j 中下载最新的驱动包 这里有 tar gz和 zip两种格式的包 因为在windows下都可
  • 递归删除符合条件的目录,文件, kotlin,java

    package a import java io IOException import java nio file import java nio file attribute BasicFileAttributes fun main ar
  • Linux和华为欧拉系统下安装mysql-5.7.30详细步骤

    大家好 又见面了 我是你们的朋友全栈君 Hello everyone see you again I m your friend Quan Zhanjun Detailed steps to install mysql 5 7 30 und
  • java.sql.array 初始化_Java数组学习

    Java数组学习 数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据 按照一定的先后次序排列组合而成 其中 每一个数据称作一个数组元素 每个数组元素可以通过一个下标来访问它们 数组的下标从0开始 数组声明创建 首先必
  • 应用程序无法正常启动(0x000007b)

    应用程序无法正常启动 0x000007b 请单击 确定 关闭应用程序 错误代码 0x000007b 是 Windows 操作系统中的一个常见错误代码 它通常与应用程序或操作系统文件的错误 损坏或不匹配相关联 这个错误代码可能会导致应用程序无
  • 正则表达式清理日志

    字段提取中正则表达式的使用 提取日志中的信息格式 lt 字段名称 gt 匹配具体信息的正则表达式 日志样例 lt 78 gt 2019 08 21T17 10 01 461970 08 00 localhost CROND root CMD
  • en结尾的单词_【第24集】en结尾的不规则动词变化

    这一集我们来看一下另一种不规则动词的变化 en 结尾 当然 这里en结尾 并不是说这个单词是en结尾 只是发音是en这样的不规则动词 那么这写不规则动词有哪些呢 我们来总结一下 tear 原形 tore 过去式 torn 过去分词 撕开 什
  • 如何在sublime Text3实时运行js代码?

    安装Node js https nodejs org en 为sublime text3添加编译系统 Tools gt Build System gt New Build System 在打开的界面中添加 cmd node file sel
  • UPnP协议学习

    UPnP架构定义了两种类型的设备 控制设备 controlled devices 和控制点 control points 控制设备扮演服务器的角色 响应控制点的请求 控制点和控制设备都能在各种平台包括个人电脑和嵌入式设备中实现 多个控制设备
  • C#8.0本质论第四章--操作符和控制流程

    C 8 0本质论第四章 操作符和控制流程 4 1操作符 有些操作符以符号的形式出现 例如 或者 等 而另一些操作符则为关键词 例如default和is 4 1 1一元正负操作符 一元正操作符 对值几乎没有影响 它在C 中是多余的 4 1 2
  • 组织机构代码输入测试用例_测试代码以用于过大的输入

    组织机构代码输入测试用例 在编写单元测试时 我们主要关注业务的正确性 我们将竭尽所能 开开心心地走在最前沿 我们有时会进行微基准测试并衡量吞吐量 但是经常遗漏的一个方面是当输入过大时我们的代码如何表现 我们测试了如何处理正常的输入文件 格式
  • MES系统介绍

    MES系统是什么 能解决企业管理中的什么问题 史上最全MES生产管理系统介绍 傲鹏MES供应商内部培训资料 错过了就没有了 一 MES系统介绍1 什么是MES系统 中文全称 制造执行系统 英文全称 manufacturing executi
  • 基于x86架构的CentOS7虚拟机通过qemu安装ARM架构CentOS7虚拟机_centos7 arm 网络配置

    原文连接 基于x86架构的CentOS7虚拟机通过qemu安装ARM架构CentOS7虚拟机 centos7 arm redrose2100的博客 CSDN博客 试过很多版本的在win10系统直接qemu安装arm版linux都失败了 也看
  • vm16安装windows系统

    安装win7系统 网上找到的iso均为ghost镜像 结果发现无法引导 找了个win10镜像可以引导 同时在创建一个cd加载win7的iso 进入win10的镜像PE 格式化硬盘 安装win7镜像 ok 同时 使用win7配置 安装win1
  • [创业之路-43] :复盘与自省 - 创业初感悟(冲动->纠结->忐忑)与“不贪、不赌、不悔”做人做事三原则的成形

    目录 创业冲动 冲动之后是纠结 选择后的忐忑 未来的应对之策 复盘后的体悟 做人做事三大基本原则1 不贪而心安 做人做事三大基本原则2 不赌而敬畏 做人做事三大基本原则3 不悔而未来 收获 创业冲动 虽然对创业进行了很多零散知识上的准备和多
  • 【WEB】关于网页设置 background-image: url死活显示不出来的解决办法

    图片或者背景显示不出来 大部分都是路径的问题 这是我图片所在的文件夹 相信很多有这个问题的小伙伴都是像我下面这样写的路径 那么背景图是不会显示出来的 解决办法如下图 原因是 在img的src中 是以当前html网页做相对文件 来设置引入图片
  • 全网最详细Postman接口测试使用教程(实战干G货)

    目录 导读 一 前言 二 接口测试 三 抓包 四 postman构造请求 五 其他的登录鉴权方式 六 总结 一 前言 测试行业现在越来越卷 不会点接口测试好像简历都已经拿不出手了 但很多小伙伴都会头疼 接口测试应该怎么入门 那么多的接口测试
  • vue axios三层封装

    utils文件下创建request js文件 第一层封装 引入axios文件 import axios from axios import qs from qs 声明公共的地址 axios defaults baseURL 设置超时 axi
  • 使用Python进行基于属性的测试

    When you write unit tests it s hard to find the right test cases You want to be certain that you covered all the interes
  • Acm Club 1326:算法2-8~2-11:链表的基本操作

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