天天看点

读书笔记----数据结构与算法JavaScript描述

  第二章 数组 数组存取元素 indexof() 返回元素在数组中的索引,不存在就是false   数组删除元素 pop() 删除数组第一个添加的元素 shitf() 删除数组第一个元素   foreach()   function square(num) { print(num, num * num); } var nums = [1,2,3,4,5,6,7,8,9,10]; nums.forEach(square);   生成新数组的迭代器 map(),filter()     var arr = [1,2,3,4]   function add(n){  return n+1; }   var newArr = arr.map(add)     第三章 列表       第四章 栈   push() 入栈,从尾部进 function push(e){     this.dataStore[this.top++] = e; } pop()出栈,从尾部出,删除尾元素 function pop(){    return this.dataStore[--this.top]; } peek()出栈从尾部出栈,不删除尾元素 function peek(){    return this.dataStore[this.top-1]; }   clear()清楚所有元素   function clear(){  this.top = 0; }   Stack类 function Stack(){    this.dataStore = [];    this.top = 0;    this.push = push();    this.pop = pop();    this.peek = peek();    this.clear = clear();    this.length = length; }   第五章 队列   push() 入队,从末尾入队   shift()出队,从头部出队   function Queue() {  this.dataStore = [];  this.enqueue = enqueue;  this.dequeue = dequeue;  this.front = front;  this.back = back;  this.toString = toString;  this.empty = empty;  } enqueue() 方法向队尾添加一个元素: function enqueue(element) { this.dataStore.push(element); }   dequeue() 方法删除队首的元素:  function dequeue() { return this.dataStore.shift(); }     可以使用如下方法读取队首和队尾的元素:  function front() { return this.dataStore[0]; }  function back() { return this.dataStore[this.dataStore.length-1]; }   第六章 链表 一组节点组成的集合     第七章 字典     第八章 散列 HashTable 类的构造函数定义如下: function HashTable() {     this.table = new Array(137);     this.simpleHash = simpleHash;     this.showDistro = showDistro;     this.put = put; //this.get = get; }       第九章 集合       集合是由一组无序但彼此之间又有一定相关性的成员构成的, 每个成员在集合中只能出现 一次         function Set() {         this.dataStore = [];         this.add = add;         this.remove = remove;         this.size = size;         this.union = union;         this.intersect = intersect;         this.subset = subset;         this.difference = difference;         this.show = show;     }       function add(data) {         if (this.dataStore.indexOf(data) < 0) {             this.dataStore.push(data);             return true;         } else {             return false;         }     }       function remove(data) {         var pos = this.dataStore.indexOf(data);         if (pos > -1) {             this.dataStore.splice(pos, 1);             return true;         } else {             return false;         }     }         function contains(data) {         if (this.dataStore.indexOf(data) > -1) {             return true;         } else {             return false;         }     }   第十章 树 二叉查找树 function Node(data, left, right) {     this.data = data;     this.left = left;     this.right = right;     this.show = show; }   function show() {     return this.data; }   function BST() {     this.root = null;     this.insert = insert;     this.inOrder = Inorder; }   function insert(data) {     var n = new Node(data, left, right);     if (this.root == null) {         this.root = n;     } else {         var current = this.root;         var parent;         while (true) {             parent = current;             if (data < current.data) {                 current = current.left;                 if (current == null) {                     parent.left = n;                     break;                 }             } else {                 current = current.right;                 if (current == null) {                     parent.right = n;                     break;                 }             }         }     } }     中序遍历   function inOrder(node){ if(!(node==null)){    inOrder(node.left);    putstr(node.show()+" ");   inOrder(node.right); } }   先序遍历 function preOrder(node){     if(!(node==null)){     putstr(node.show()+" ");     preOrder(node.left);    preOrder(node.right); } }     后续遍历 function postOrder(){ if(!(node==null)){    postOrder(node.left); postOrder(node.right); putstr(node.show()+" "); } }     第十一章 图

function Graph(v){ this.vertices = v; this.edges = 0; this.adj = []; for(var i =0;i<this.vertiles;++i){ this.adj[i] = []; this.adj[i].push(""); } this.addEdge = addEdge; this.toString = toString;   }     第十二章 算法排序   冒泡排序 function bubbleSort(){ var numElements = this.dataStore.length; var temp; for(var outer = numElements;outer>=2;--outer){    for(var inner =0;inner<=outer-1;inner++){     if(this.dataStore[inner]>this.dataStore[inner+1]){       swap(thisdataStore,inner,innner+1) } } } }     选择排序 function selectionSort(){    var min,temp; for(var outer=0;outer<=this.dataStore.length-2;++outer){      min = outer;     for(var inner=outer+1;inner<=this.dataStore.length-1;i++){    if(this.dataStore[inner]<this.dataStore[min]){         min = innner; } swap(this.dataStore,outer,inner); } } }       插入排序   function insertSort(){     var temp,inner;     for(var outer=1;outer<=this.dataStore.length-1;++outer){     temp = this.dataStore[outer];    inner = outer;    while(inner>0&&(this.dataStore[inner-1]>=temp)){     this.dataStore[inner] = this.dataStore[inner-1]; --inner; } this.dataStore[inner] = temp; } }       希尔排序 function shellsort() {     for (var g = 0; g < this.gaps.length; ++g) {         for (var i = this.gaps[g]; i < this.dataStore.length; ++i) {             var temp = this.dataStore[i];             for (var j = i; j >= this.gaps[g] && this.dataStore[j - this.gaps[g]] > temp; j -= this.gaps[g]) {                 this.dataStore[j] = this.dataStore[j - this.gaps[g]];             }             this.dataStore[j] = temp;         }     } }   归并排序   function mergeSort(arr) {     if (arr.length < 2) {         return;     }     var step = 1;     var left, right;     while (step < arr.length) {         left = 0;         right = step;         while (right + step <= arr.length) {             mergeArrays(arr, left, left + step, right, right + step);             left = right + step;             right = left + step;         }         if (right < arr.length) {             mergeArrays(arr, left, left + step, right, arr.length);         }         step *= 2;     } }   function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {     var rightArr = new Array(stopRight - startRight + 1);     var leftArr = new Array(stopLeft - startLeft + 1);     k = startRight;     for (var i = 0; i < (rightArr.length - 1); ++i) {         rightArr[i] = arr[k];         ++k;     }     k = startLeft;     for (var i = 0; i < (leftArr.length - 1); ++i) {         leftArr[i] = arr[k];         ++k;     }     rightArr[rightArr.length - 1] = Infinity; // 哨兵值     leftArr[leftArr.length - 1] = Infinity; // 哨兵值     var m = 0;     var n = 0;     for (var k = startLeft; k < stopRight; ++k) {         if (leftArr[m] <= rightArr[n]) {             arr[k] = leftArr[m];             m++;         } else {             arr[k] = rightArr[n];             n++;         }     }     print("left array - ", leftArr);     print("right array - ", rightArr); } var nums = [6, 10, 1, 9, 4, 8, 2, 7, 3, 5]; print(nums); print(); mergeSort(nums); print(); print(nums);    

转载于:https://www.cnblogs.com/SunlikeLWL/p/8670373.html

继续阅读