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语言的数据结构,下面是对于一个单链表的简单的实现. /** ***************** ...
随机推荐
- Linux 之集群 LVS
查看系统是否支持IPVS功能 [root@nginx ~]# grep -i 'ipvs' /boot/config-2.6.18-308.el5 # IPVS transport protocol ...
- C# MVC ( 添加路由规则以及路由的反射机制 )
在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开 (1) 约束的规则 从上往下 贪婪性 (2) 用 routes.MapRoute(...) 添加 ...
- KVM虚拟化技术(七)虚拟机配置文件
KVM虚拟机的配置文件在/etc/libvirt/qemu/下,为xml文件 整体结构如下: <domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 ...
- 一、prolog简介
一般来说,人工智能语言应具备如下特点: 1.具有符号处理能力(即非数值处理能力): 2.适合于结构化程序设计,编程容易: 3. 具有递归功能和回溯功能: 4. 具有人机交互能力: 5. 适合于推理: ...
- 8.31 js基础总结1
JavaScript是一种脚本语言,由web浏览器进行解释和执行.它给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 将JavaScript应用到网页中常用的方法有两种,第 ...
- 开启macbook win7触控屏右键
开启macbook win7触控屏右键,如下图
- Servlet学习三——传输文件
最先在考虑传输文件时,想通过java写一个文件上传案例,传给Servlet,Servlet再保存至数据库中,但苦于一直没找到实例,听说Flex有实际的例子,就直接用Flex例子来测试了.本文的顺序为: ...
- IOS系列swift语言之课时六
这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...
- matlab struct结构体用法
结构体的赋值: 结构体的赋值,这里不建议用下面这种形式进行统一赋值, s = sturct('field1',values1,'field2',values2,-) 而是建议直接赋值,就是对每一个属性 ...
- error-2016-2-15
错误:该请求包含双重转义序列,而 Web 服务器上配置的请求筛选拒绝双重转义序列原因:一些URL中可能会包含+号等符号,然后IIS7以上的版本会默认拒绝请求此URL,需要进行如下的修改. 解决PHP中 ...