数据结构

111 阅读2分钟

队列(Queue)

  • 队列是一种特殊的数组,先进先出原则(例如取号叫号的过程)。
  • queue.push为入队;queue.shift为出队。

代码实现取号和叫号

const divScreen = document.querySelector("#screen"); 
const btnCreateNumber = document.querySelector("#createNumber");          这个部分是获取html文件里的元素
const btnCallNumber = document.querySelector("#callNumber");
const spanNewNumber = document.querySelector("#newNumber"); 
const spanQueue = document.querySelector("#queue");

let n = 0; let queue = [];
//添加取号的的点击事件
btnCreateNumber.onclick = () => {
n += 1; // queue.push(n) queue.push.call(queue, n);   //入队
spanNewNumber.innerText = n; 
spanQueue.innerText = JSON.stringify(queue); };
//添加点击叫号的点击事件
btnCallNumber.onclick = () => { 
if (queue.length === 0) { return; } // const m = queue.shift();
const m = queue.shift.call(queue);                    //出队
divScreen.innerText = `请 ${m} 号就餐`; 
spanQueue.innerText = JSON.stringify(queue); };

栈(Stack)

  • 是一种特殊的数组,先进后出原则(例如一行人进入狭长的电梯间,先进入的反而要后出)。
  • push为压栈(进);pop为弹栈(出)

代码举例:调用栈

function f1() {let a =1; return a+f2()}
function f2() {let b =2; return a+f3()}    //压栈,弹栈
function f3() {let c =3; return c}
f1()

链表(Linked-List):一个链一个

链表结构

data:value(链表数据)

next:null(下一个链表名 没有的话则为null)

代码实现链表的增删改查

//增加链表节点
const createList = value => {
return createNode(value); 
}; 
const appendList = (list, value) => {
const node = createNode(value); 
let x = list; 
while (x.next) { x = x.next; } 
                                       // x.next === null              //x 是最后一个节点
x.next = node; 
return node; 
}; 

//删除节点
const removeFromList = (list, node) => { 
let x = list; let p = node; 
const createNode = value => { 
return { data: value, next: null }; 
};
 //遍历链表节点
const travelList = (list, fn) => { 
let x = list;
while (x !== null) { 
fn(x);
x = x.next;
}
};

const list = createList(10);
const node2 = appendList(list, 20); 
const node3 = appendList(list, 30); 
const node4 = appendList(list, 40); 
travelList(list, node => {
console.log(node.data); });

双向链表

双向链表指每一个节点都有一个previous用来指向上一个节点。

双向链表的结构

data:value(链表数据)

next:null(下一个链表名 没有的话则为null)

previous:填入上一个节点名

循环链表

最后一个节点的next指向链表中的第一个节点,叫做循环链表。