摘要:的前部分內(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 Stack5 Iterators- { 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; } }
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 Stack6 Stack and Queue Application 7 作業(yè)- 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; } } }
作業(yè)描述
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66488.html
摘要:原文地址學(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的個人博客 幾乎所有的編程...
摘要:一前言上一篇已經(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)用:棧和隊列 如果寫錯的地方希望大家...
摘要:下一篇數(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》...
摘要:題目使用棧實現(xiàn)隊列的下列操作將一個元素放入隊列的尾部。用棧實現(xiàn)隊列,可以用兩個棧完成題解。入隊列時用存入節(jié)點,出隊列時內(nèi)節(jié)點順序出棧壓入中。這類編程語言就壓根不需要用隊列實現(xiàn)?;蛴脳崿F(xiàn)隊列這種問題,因為棧和隊列本身就必須借助實現(xiàn)。 題目: 使用棧實現(xiàn)隊列的下列操作: push(x) -- 將一個元素放入隊列的尾部。 pop() -- 從隊列首部移除元素。 peek() -- 返回隊...
摘要:下面是入棧時代碼獲得隊列長度反轉(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...
閱讀 2979·2021-11-23 10:12
閱讀 2704·2021-11-23 09:51
閱讀 2051·2021-11-15 11:37
閱讀 1390·2019-08-30 15:55
閱讀 1974·2019-08-29 15:40
閱讀 1176·2019-08-28 18:30
閱讀 1657·2019-08-28 18:02
閱讀 2653·2019-08-26 12:00