C++实现简单的单链表
下面实现的是一个简单的单链表
功能不多,学习使用
#pragma once
#include <iostream>
using namespace std; class ListEx
{
private:
struct Node
{
Node* next;
int data;
Node(const Node& node): data(node.data), next(nullptr) {}
Node(const T& d): data(d), next(nullptr) {}
}; private:
Node* head;
int n; //索引 public:
ListEx(): head(nullptr), n(0) {}
Node* getp(int pos)
{
if (pos < 0 || pos > n)
{
return nullptr;
} if (pos == 0)
{
return head;
} Node* p = head; for (int i = 1; i < pos; i++)
{
p = p->next;
} return p->next;
} void travel()
{
Node* p = head; if (p == nullptr)
{
return;
} p = p->next; while (p)
{
cout << p->data << "\t" << endl;
p = p->next;
}
} void insert(int d, int pos = -1)
{
if (head == nullptr)
{
head = new Node(0);
Node* p = new Node(d);
head->next = p;
p->next = nullptr;
}
//添加到最后
else if (pos < 0 || pos > n)
{
Node* p = getp(n);
Node* node = new Node(d);
p->next = node;
node = nullptr;
}
//添加到pos位置
else
{
Node* node = new Node(d); Node* p = getp(n - 1);
Node* q = p->next;
p->next = node;
node->next = q;
} ++n;
} //从pos开始查找data 为d的元素,默认从0开始
int find(int d, int pos = 0)
{
Node* p = getp(pos); if (p == nullptr)
{
return -1;
} while (p)
{
if (p->data == d)
{
return pos;
} pos++;
p = p->next;
} return -1;
} //从pos开始删除data为d的元素
bool erase(int d, int pos = 0)
{
int nIndex = find(d, pos); if (nIndex == -1)
{
return false;
} Node* p = getp(nIndex - 1);
Node* q = getp(nIndex); if (p == nullptr)
{
return false;
} p->next = q->next;
delete q;
return true;
} };
C++实现简单的单链表的更多相关文章
- java实现一个简单的单链表反转
自定义一个单链表,实现链表反转: 1.普通方法实现 2.递归方式实现 package listNode; public class ReverseNode { public static void m ...
- php实现简单的单链表
<?php /** * 建立一个链表,节点的data为数组,记录一个id,完成链表所以操作 */ //结点,结点数据data定义为一个数组,id和value class Node{ public ...
- 单链表数据结构 - java简单实现
链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...
- C++ 单链表基本操作
链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...
- "《算法导论》之‘线性表’":基于数组实现的单链表
对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表).现在我们就来看看怎么用数组来实现单链表. 1. 定义单链表中结点的数据结构 typedef int ElementType; cl ...
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- 用最简单的方式学Python单链表
Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ...
- 超级简单的数组加单链表实现Map
/** * 超级简单的数组加单链表实现Map * @author jlj * */ public class MyHashMap { public MyList[] lists; public int ...
- C:单链表的简单实现
前言 今天整理资料的时候翻出来的文件,发现是以前学习数据结构的时候写的代码,当初是看郝凯老师的视频学习的C语言的数据结构,下面是对于一个单链表的简单的实现. /** ***************** ...
随机推荐
- Redis3.0.1 Stable版本的集群部署(Mac)
本文档基于如下原始文档(CentOS)创建: http://blog.csdn.net/xu470438000/article/details/42971091 修改了一些路径的错误,补全了一些命令执 ...
- 关于已配置log4j,运行tomcat时显示警告的分析
有时候,我们在JavaEE项目中配置了log4j及其参数信息,但是启动tomcat时,仍会显示如下信息:
- LR自定义函数以及调用
2.2.自定义函数以及调用 2.2.1.虚拟用户编程,使用C# 语言DLL 在VS中建立DLL类库项目,编写函数时使用public声明:实现函数后编译生成DLL: 在LR中建立 .Net Vuser脚 ...
- MySQL追踪优化器小试
首先看一下MySQL追踪优化器的典型用法: 打开:SET optimizer_trace="enabled=on"; 查询优化器的信息:SELECT * FROM INFORMAT ...
- python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email
Selenium+python环境搭建见虫师的pdf文档,非常详尽 简易框架: 1.文件目录:
- Angular JS中$timeout的用法及其与window.setTimeout的区别
$timeout的用法 angular.js的$timeout指令对window.setTimeout做了一个封装,它的返回值是一个promise对象.当定义的时间到了以后,这个promise对象就会 ...
- 使用HTML5新支持的搭建WebRtc环境来作为视频通讯
发现如果再重新设计这块的话,又会有不同的思路.对于可定位能力,我们可以全息日志采集,将每个用户在整个系统的走向异步的抓取下来,再同步到专门的日志分析系统,在这个系统中可以根据用户号码.订单号进行过滤分 ...
- LDAP与SSH
一般情况下,客户端配置好之后,ssh是可以直接用的,若不能,则需手动配置 1:vim /etc/ssh/sshd_config 把UsePAM改成yes 2:在vim /etc/pam.d/sshd添 ...
- 转发(forward)和重定向(sendRedirect)
一. RequestDispatche 是一个Web资源的包装器,可以用来把当前的Request传递给该资源,或者把新的资源包括到当前的相应中.详细来说:RequestDispatch对象从客户端获取 ...
- 检查项目里是否有IDFA的方法
检查项目里是否有IDFA的方法: 步骤:1.打开终端cd到要检查的文件的根目录. 2.执行下列语句:grep -r advertisingIdentifier . (别少了最后那个点号). 发现有ma ...