下面实现的是一个简单的单链表

功能不多,学习使用

#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++实现简单的单链表的更多相关文章

  1. java实现一个简单的单链表反转

    自定义一个单链表,实现链表反转: 1.普通方法实现 2.递归方式实现 package listNode; public class ReverseNode { public static void m ...

  2. php实现简单的单链表

    <?php /** * 建立一个链表,节点的data为数组,记录一个id,完成链表所以操作 */ //结点,结点数据data定义为一个数组,id和value class Node{ public ...

  3. 单链表数据结构 - java简单实现

    链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...

  4. C++ 单链表基本操作

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

  5. "《算法导论》之‘线性表’":基于数组实现的单链表

    对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表).现在我们就来看看怎么用数组来实现单链表. 1. 定义单链表中结点的数据结构 typedef int ElementType; cl ...

  6. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  7. 用最简单的方式学Python单链表

    Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ...

  8. 超级简单的数组加单链表实现Map

    /** * 超级简单的数组加单链表实现Map * @author jlj * */ public class MyHashMap { public MyList[] lists; public int ...

  9. C:单链表的简单实现

    前言 今天整理资料的时候翻出来的文件,发现是以前学习数据结构的时候写的代码,当初是看郝凯老师的视频学习的C语言的数据结构,下面是对于一个单链表的简单的实现. /** ***************** ...

随机推荐

  1. Redis中的简单事物以及消息订阅发布

    Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比:   MySQL Redis 开启 start transactio ...

  2. c#判断闰年

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. NET Core1.0之CentOS平台开发控制台程序DEMO

    微软发布NET Core1.0正式版本,并支持了red hat linux平台,所以在CentOS平台,通过编辑器玩下控制器程序. 一.安装.NET Core SDK 先下载SDK并放在指定目录. s ...

  4. java中 DigestUtils.md5Hex 的c#实现

    C# string target= "央行降息影响楼市:100万20年期房贷月供减少141元"; string result = Md5Helper.Md5Hex(aa); //r ...

  5. 【Java布局】FlowLayout布局时设定组件大小

    默认的JPanel中,采用的是FlowLayout布局 下面是api中的定义: JPanel(boolean isDoubleBuffered)           创建具有 FlowLayout 和 ...

  6. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  7. nodejs学习笔记(一)

    终于开始学NodeJs了 说说遇到的问题吧 1.安装express npm install -g express(按道理说,这个全局安装是没问题的,但他就是出问题了) 解决方案: 来源:http:// ...

  8. NSDate 刚刚、几分钟、几小时

    - (NSString *)minutesAgo { NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @ ...

  9. js 验证用户名和密码是否为空

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  10. java_js_检查是否全为数字

    //检查所有输入文本都是数字类型 var len=blackNumber.length; var regExp=new RegExp("\\d{"+len+"}" ...