F#实现的单链表(函数式的思想)

// 在 http://fsharp.net 上了解有关 F# 的更多信息
// 请参阅“F# 教程”项目以获取更多帮助。

type list =
    | Nil
    | Cons of int * list

let x = Cons(1, Cons(2, Cons(3, Cons(4, Nil))))

//let rec printlist l=
//    match l with
//    | Nil -> ()
//    | Cons(a, l‘) -> printfn "%d" a; printlist l‘

//打印程序,可通过提供不同的函数f,实现不同的打印方式
let rec printlist l f=
    match l with
    | Nil -> ()
    | Cons(a, l‘) ->
    ((if f a then printfn "%d" a else ()); printlist l‘ f)

[<EntryPoint>]
let main argv =
    printlist x (fun x-> true)
    printlist x (fun x -> x>2)
    System.Console.ReadLine()
    0 // 返回整数退出代码

  

时间: 2024-11-01 16:29:23

F#实现的单链表(函数式的思想)的相关文章

线性表的链式表示和实现----线性(单)链表

头文件 head.h #include<string.h> #include<ctype.h> #include<malloc.h> /* malloc()等 */ #include<limits.h> /* INT_MAX等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<stdlib.h> /* atoi() */ #include<io.h> /* eof()

单链表双指针实现

单链表的实现思想和双指针的应用方法在前面博客中都已阐述,在本文将实现双指针实现单链表的初始化,插入,删除,打印. [测试代码1] #include<stdio.h> #include<stdlib.h> typedef struct Node{ int data; struct Node *next; }node_t; //创建头结点 node_t * create() { node_t *head = (node_t *)malloc(sizeof(node_t)); head-

单链表总结篇

[基本概念]单链表即单向链表,数据结构为一个接一个的结点组成,每个结点有两个成员,一个数据域一个指向下一个结点的指针,如下: struct Node { int data; struct Node *next; }; 单链表基本操作包括链表初始化.插入.删除,其中初始化操作是指让单链表存在一个头结点,其数据域随机,头结点指向下一个结点,每次访问都要从头结点开始访问,插入结点方式有两种,尾部插入和结点前部插入,尾部插入很简单与正常的输入顺序一致,而前部插入需要时常变动头结点的指针,始终让他指向新插

如何使用C++实现单链表

线性表--链表 为什么假期也在发文章 //TODO NullGirlfrindException 请忽略以上两行无聊的事实...... 如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候,却需要移动大量的元素,效率较低,那么是否有一种方法可以改善或者解决这个问题呢? 首先我们需要考虑,为什么顺序表中的插入删除操作会涉及到元素的移动呢? 好家伙,问题就

函数式编程思想:以函数的方式思考,第3部分

过滤.单元测试和代码重用技术 译者:Elaine.Ye原文作者:Neal Ford 发布:2011-07-06 11:23:24挑错 | 查看译者版本 | 收藏本文 在函数式编程思想的第一部分和第二部分中, 我考察了一些函数式编程的主题,研究了这些主题如何与Java?及其相关语言产生关联.本篇文章继续这一探索过程,给出来自前面文章的数字分类器的一个 Scala版本,并会讨论一些颇具学术色彩的主题,比如说局部套用(currying).部分应用(partial application)和递归等. 用

第4章第1节练习题6 二叉树叶子节点链接成单链表

问题描述 设计一个算法,将二叉树的叶子节点按从左到右的顺序连成一个单链表,表头指针为head.链接时用叶子节点的右指针来存放单链表指针. 算法思想 题目要求将叶子节点按自左向右的次序连接成一个单链表,因此很容易考虑到的便是将整棵二叉树按照先序或中序或后序的方式遍历一次. 在遍历的过程中对叶子节点单独判断,如果是叶子节点,则将其做一个标识(比如用额外的指针指向该节点),接着遍历下一个叶子节点,遍历到另一个叶子节点后,然后让已被标识的叶子节点的右孩子指向该节点,依次类推便可以实现将叶子节点连接成单链

数据结构单链表

#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; typedef struct XscjNode{ char NO[10]; char Name[16]; char Mtel[11]; char Email[16]; char BornAddr[20]; float AScore; float BScore;

1.6带环单链表

检测单链表中是否有环 方法一:蛮力法 定义一个集合用来存放结点的引用,并将其初始化为空,从链表的头结点开始向后遍历,每遍历到一个结点就判断集合中是否有这个结点的引用,如果没有,说明这个结点是第一次访问,还没有形成环,那么将这个结点的引用添加到集合中去.如果在集合中找到了同样的结点,那么说明这个结点已经被访问过了,于是就形成了环.这种方法的时间复杂度为O(n),空间复杂度也为O(n). 方法二 : 快慢指针遍历法 定义两个指针fast(快)与slow(慢),二者的初始值都指向链表头,指针slow每

单链表简单实现c++

首先定义一个类,相关数据,函数封装,在头文件中 #pragma once class SingleList { public: typedef struct _NODE{ int nData; //数据域 _NODE *pNext; //指向下一个节点 }NODE,*PNODE; private: NODE * m_pHandNode; int m_nCount; public: SingleList(); ~SingleList(); bool InitList(); //初始化操作 bool