成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

peixn / 3035人閱讀

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

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

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

1 Stacks 1.1 鏈表實現(xiàn)
/**
 * 學(xué)習(xí)stack,鏈表實現(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 簡單的數(shù)組實現(xiàn) 2 Resizing Arrays 3 Queues 3.1 鏈表實現(xiàn) 3.2 簡單的數(shù)組實現(xiàn) 4 Generics

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

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

Iterable,Java的可遍歷類,接口,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)為這不是一個好method,可能成為調(diào)試隱患
}

for-each statement

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

Stack Iterator: 鏈表實現(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66488.html

相關(guān)文章

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

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

    doodlewind 評論0 收藏0
  • 【Java實現(xiàn)】棧和隊列就是這么簡單

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

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

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

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

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

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

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

    AlanKeene 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<