成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Stack & Queue 棧和隊(duì)列的學(xué)習(xí)筆記

peixn / 3097人閱讀

摘要:的前部分內(nèi)容講的是棧和隊(duì)列的實(shí)現(xiàn)。學(xué)習(xí)環(huán)境在學(xué)習(xí)這門(mén)課之前,先引入的概念,即抽象數(shù)據(jù)類(lèi)型。鏈表實(shí)現(xiàn)學(xué)習(xí),鏈表實(shí)現(xiàn)簡(jiǎn)單的數(shù)組實(shí)現(xiàn)鏈表實(shí)現(xiàn)簡(jiǎn)單的數(shù)組實(shí)現(xiàn)解決使用棧或者隊(duì)列時(shí),的數(shù)據(jù)類(lèi)型指定問(wèn)題。

Week2 的前部分內(nèi)容講的是棧和隊(duì)列的Java實(shí)現(xiàn)。
學(xué)習(xí)環(huán)境:mac, inteliJ, java version "1.8.0_77"

在學(xué)習(xí)這門(mén)課之前,先引入Abstract Data Types(ABT)的概念,即抽象數(shù)據(jù)類(lèi)型。ABT將operators封裝起來(lái),例如pop,push,這樣使用者就不必深入了解技術(shù)細(xì)節(jié),而是更多關(guān)注與解決問(wèn)題本身。

1 Stacks 1.1 鏈表實(shí)現(xiàn)
/**
 * 學(xué)習(xí)stack,鏈表實(shí)現(xiàn)
 * Created by susu on 17/1/9.
 */
public class LinkStackTest {
    private Node first = null;
    private class Node
    {
        String item;
        Node next;
    }

    public boolean isEmpty()
    {
        return first == null;
    }

    public void push(String item)
    {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public String pop()
    {
        String item = first.item;
        first = first.next;
        return item;
    }
}
1.2 簡(jiǎn)單的數(shù)組實(shí)現(xiàn) 2 Resizing Arrays 3 Queues 3.1 鏈表實(shí)現(xiàn) 3.2 簡(jiǎn)單的數(shù)組實(shí)現(xiàn) 4 Generics

解決使用?;蛘哧?duì)列時(shí),item 的數(shù)據(jù)類(lèi)型指定問(wèn)題。例如在基礎(chǔ)的class中指定了 String item; 那么在其他地方每次使用時(shí),要么復(fù)制代碼修改類(lèi)型,要么強(qiáng)制轉(zhuǎn)換。問(wèn)題是,強(qiáng)制轉(zhuǎn)換是在用戶(hù)使用端進(jìn)行轉(zhuǎn)換,報(bào)錯(cuò)了的話是無(wú)法監(jiān)測(cè)到的,所以可以在鏈表實(shí)現(xiàn)中修改成generics。

note:數(shù)組很難實(shí)現(xiàn)generics.

/**
 * Generic stack: linked-list implementation
 * Created by susu on 17/1/10.
 */
public class Stack {
    private Node first = null;

    private class Node
    {
        Item item;
        Node next;
    }

    public boolean isEmpty()
    { return first == null; }

    public void push(Item item)
    {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public Item pop()
    {
        Item item = first.item;
        first = first.next;
        return item;
    }
}
5 Iterators

Iteration,迭代器,解決的問(wèn)題是,使得client 端口在使用stack等數(shù)據(jù)結(jié)構(gòu)時(shí),能夠遍歷集合中的元素,而不必要知道我是用數(shù)組還是鏈表實(shí)現(xiàn)的。

Iterable,Java的可遍歷類(lèi),接口,has a method that returns an iterator.
Iterable Interface

public interface Iterable
{
    Iterator Iterator();
}

Iterators has methods hasNext(),next()
Iterator Interface

public interface Iterator
{
    Boolean hasNext();
    Item next();
    void remove();//教授認(rèn)為這不是一個(gè)好method,可能成為調(diào)試隱患
}

for-each statement

for (String s : Stack)
    StdOut.println(s);

Stack Iterator: 鏈表實(shí)現(xiàn)

/**
 * Generic stack: linked-list implementation
 * Created by susu on 17/1/10.
 */
import java.util.Iterator;
import java.util.ListIterator;

public class Stack implements Iterable{
    private Node first = null;

    private class Node
    {
        Item item;
        Node next;
    }

    public boolean isEmpty()
    { return first == null; }

    public void push(Item item)
    {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public Item pop()
    {
        Item item = first.item;
        first = first.next;
        return item;
    }
    
    public Iterator iterator()
    { return new ListIterator()}
    
    private class ListIterator implements Iterator
    {
        private Node current = first;
        
        public boolean hasNext() { return current != null; }
        public void remove { /* not supported */ }
        public Item next()
        {
            Item item = current.item;
            current = current.next;
            return item;
        }
    }
}
6 Stack and Queue Application 7 作業(yè)

作業(yè)描述

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/66488.html

相關(guān)文章

  • 學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(一)——棧和隊(duì)列

    摘要:原文地址學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)一棧和隊(duì)列博主博客地址的個(gè)人博客幾乎所有的編程語(yǔ)言都原生支持?jǐn)?shù)組類(lèi)型,因?yàn)閿?shù)組是最簡(jiǎn)單的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。他們就是棧和隊(duì)列。我們稱(chēng)作棧頂,而另一端我們稱(chēng)作棧底。移除棧頂?shù)脑兀瑫r(shí)返回被移除元素。 前言 只要你不計(jì)較得失,人生還有什么不能想法子克服的。 原文地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(一)——棧和隊(duì)列 博主博客地址:Damonare的個(gè)人博客 幾乎所有的編程...

    doodlewind 評(píng)論0 收藏0
  • 【Java實(shí)現(xiàn)】棧和隊(duì)列就是這么簡(jiǎn)單

    摘要:一前言上一篇已經(jīng)講過(guò)了鏈表實(shí)現(xiàn)單向鏈表了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用棧和隊(duì)列如果寫(xiě)錯(cuò)的地方希望大家能夠多多體諒并指正哦,如果有更好的理解的方式也希望能夠在評(píng)論下留言,讓大家學(xué)習(xí)學(xué)習(xí)二數(shù)據(jù)結(jié)構(gòu)棧就是這么簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu) 一、前言 上一篇已經(jīng)講過(guò)了鏈表【Java實(shí)現(xiàn)單向鏈表】了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用:棧和隊(duì)列 如果寫(xiě)錯(cuò)的地方希望大家...

    Ethan815 評(píng)論0 收藏0
  • JS數(shù)據(jù)結(jié)構(gòu)與算法_棧&隊(duì)列

    摘要:下一篇數(shù)據(jù)結(jié)構(gòu)與算法鏈表寫(xiě)在前面說(shuō)明數(shù)據(jù)結(jié)構(gòu)與算法系列文章的代碼和示例均可在此找到原計(jì)劃是把你不知道的三部全部看完的,偶然間朋友推薦了數(shù)據(jù)結(jié)構(gòu)與算法的一套入門(mén)視頻,學(xué)之。手頭上恰好有學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的書(shū)籍,便轉(zhuǎn)而先把數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)。 下一篇:JS數(shù)據(jù)結(jié)構(gòu)與算法_鏈表 寫(xiě)在前面 說(shuō)明:JS數(shù)據(jù)結(jié)構(gòu)與算法 系列文章的代碼和示例均可在此找到 原計(jì)劃是把《你不知道的Javascript》...

    AndroidTraveler 評(píng)論0 收藏0
  • LeetCode 232:用棧實(shí)現(xiàn)隊(duì)列 Implement Queue using Stacks

    摘要:題目使用棧實(shí)現(xiàn)隊(duì)列的下列操作將一個(gè)元素放入隊(duì)列的尾部。用棧實(shí)現(xiàn)隊(duì)列,可以用兩個(gè)棧完成題解。入隊(duì)列時(shí)用存入節(jié)點(diǎn),出隊(duì)列時(shí)內(nèi)節(jié)點(diǎn)順序出棧壓入中。這類(lèi)編程語(yǔ)言就壓根不需要用隊(duì)列實(shí)現(xiàn)棧或用棧實(shí)現(xiàn)隊(duì)列這種問(wèn)題,因?yàn)闂:完?duì)列本身就必須借助實(shí)現(xiàn)。 題目: 使用棧實(shí)現(xiàn)隊(duì)列的下列操作: push(x) -- 將一個(gè)元素放入隊(duì)列的尾部。 pop() -- 從隊(duì)列首部移除元素。 peek() -- 返回隊(duì)...

    cloud 評(píng)論0 收藏0
  • LeetCode 225:用隊(duì)列實(shí)現(xiàn)棧 Implement Stack using Queues

    摘要:下面是入棧時(shí)代碼獲得隊(duì)列長(zhǎng)度反轉(zhuǎn)次數(shù)為隊(duì)列長(zhǎng)度減一反轉(zhuǎn)語(yǔ)言沒(méi)有棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu),只能用數(shù)組或雙端隊(duì)列實(shí)現(xiàn)。這類(lèi)編程語(yǔ)言就壓根不需要用隊(duì)列實(shí)現(xiàn)棧或用棧實(shí)現(xiàn)隊(duì)列這種問(wèn)題,因?yàn)闂:完?duì)列本身就必須借助實(shí)現(xiàn)。 題目: 使用隊(duì)列實(shí)現(xiàn)棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 Impl...

    AlanKeene 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<