資料結構與演算法(一)之陣列,佇列,棧(偏向JS)

2021-10-07 08:06:35 字數 4642 閱讀 1869

一、基本概念:

資料的組織方式

二、生活中的例項:

圖書的擺放,快遞分發

三、常見的資料結構

注意事項

陣列(array) ※ ※ ※ ※ ※

var arr =[1

,2,3

,4,5

]var arr1 =

newarray()

// 效率低

arr1 =

['q'

,'w'

,'e'

]// 陣列的長度

console.

log(arr.length)

;// 陣列的遍歷

arr.

foreach

((item, i)

=>);

// 陣列元素插入

arr.

splice(2

,0,'a'

,'b'

)// [1, 2, "a", "b", 3, 4, 5] "插入"

console.

log(arr,

'插入');

// 刪除

arr.

splice(1

,3) console.

log(arr,

'刪除');

// [1, 3, 4, 5] "刪除"

// 修改

arr.

splice(1

,1,'1123456'

,'gh'

) console.

log(arr,

'修改');

// [1, "1123456", "gh", "a", "b", 3, 4, 5] "刪除"

// 獲取

console.

log(arr[0]

);// 1

// 拼接陣列

var arrc = arr.

concat

(arr1)

console.

log(arrc,

'拼接陣列');

// [1, "1123456", "gh", 4, 5, "q", "w", "e"] "拼接陣列"

// 拼接 返回字串

// var arrj = arr.join(',')

// console.log(arrj, '==join'); // 1,1123456,gh,4,5 ==join

// 轉化為字串

console.

log(arr.

tostring()

,'轉化為字串 tostring');

// 1,1123456,gh,4,5

console.

log(arr.

valueof(3

),'轉化 value of');

// [1, "1123456", "gh", 4, 5] value.valueof() 返回value 的原始值

// 陣列的迭代

// every,some(判斷陣列中是不是包含某一項或者所有項)

let flag = arr.

every

(item =>

) console.

log(flag,

'迭代 every');

// every=>false some=> true

//filter map

let arrf = arr.

filter

(item =>

) console.

log(arrf,

'迭代 filter');

// [1, "1123456"]

let arrmap = arr.

map(item =>

) console.

log(arrmap,

'迭代 map');

// ["1 &", "1123456 &", "gh &", "4 &", "5 &"]

// arr.reduce(callback[, initialvalue])

let arrreduce = arr.

reduce

((pre, cur)

=>

) console.

log(arrreduce,

'迭代 reduce');

// 1,1123456,gh,4,5

// 優勢在於reduce方法有返回值, 而foreach沒有 【 函式式程式設計 】

佇列(queue)
// 受限的線性結構

function

queue

(params)

;// dequeue():移除佇列的第一(即排在佇列最前面的)項,並返回被移除的元素。

queue.prototype.

dequeue

=function()

;// front():返回佇列中第乙個元素——最先被新增,也將是最先被移除的元素。佇列不做任何變動(不移除元素,只返回元素資訊——與stack類的peek方法非常類似)。

queue.prototype.

front

=function()

;// isempty():如果佇列中不包含任何元素,返回true,否則返回false。

queue.prototype.

isempty

=function()

;// size():返回佇列包含的元素個數,與陣列的length屬性類似

queue.prototype.

size

=function()

;// return this.items

}

// 實現擊鼓傳花的函式

function

passgame

(namelist, num)

// 2.尋找最後剩下的人

while

(queue.

size()

>1)

// 將第num個人, 從佇列中移除

queue.

dequeue()

;}// 3.獲取剩下的乙個人

alert

(queue.

size()

);var endname = queue.

dequeue()

;alert

("最終留下來的人:"

+ endname)

;// 4.獲取該人在佇列中的位置

return namelist.

indexof

(endname)

;}

*** 優先順序佇列(有特權,可以插隊的佇列)。
// 封裝優先順序佇列

function

priorityqueue()

// 新增元素的方法

this

.enqueue

=function

(element, priority)

else

}// 遍歷完所有的元素, 優先順序都大於新插入的元素時, 就插入到最後if(

!added)}}

;// 刪除元素的方法

this

.dequeue

=function()

;// 獲取前端的元素

this

.front

=function()

;// 檢視元素是否為空

this

.isempty

=function()

;// 獲取元素的個數

this

.size

=function()

;}

棧(stack)
// 棧結構的封裝

function

stack()

;// pop():移除棧頂的元素,同時返回被移除的元素。 // 出棧

stack.prototype.

pop=

function()

;// peek():返回棧頂的元素,不對棧做任何修改(這個方法不會移除棧頂的元素,僅僅返回它)。

stack.prototype.

peek

=function()

;// isempty():如果棧裡沒有任何元素就返回true,否則返回false。

stack.prototype.

isempty

=function()

;// size():返回棧裡的元素個數。這個方法和陣列的length屬性很類似。

stack.prototype.

size

=function()

;// clear():移除棧裡的所有元素。

stack.prototype.

clear

=function()

;// tostring():棧裡的所有元素轉化為字元。

stack.prototype.

tostring

=function()

);return res;};

}

資料結構與演算法(三)之集合,字典(偏向js).

資料結構之陣列佇列

佇列的特性 1.佇列是一種線性資料結構,與陣列相比,佇列的方法是陣列的子集 2.向佇列中新增元素只能在隊尾進行,在隊首刪除元素 3.佇列是一種先進先出的資料結構 佇列的方法 1.void enqueue e e 向佇列中新增元素 2.e dequeue 從佇列中刪除元素 3.int getsize ...

資料結構 陣列佇列

佇列的實現還是依託於一開始所寫的陣列 資料結構 二次封裝自己的陣列 一 完成陣列基本功能 資料結構 二次封裝自己的陣列 二 公升級為泛型陣列 資料結構 二次封裝自己的陣列 三 公升級為動態陣列 下面是佇列的實現 class arrayqueue queue public arrayqueue pub...

基礎資料結構與演算法 陣列,佇列,鍊錶,棧

判斷是否需要擴容 private void judgesize else 擴容或者收縮 param size private void resize int size data temp public string pop else public intgetsize public boolean ...