摘要:的前部分內(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 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,迭代器,解決的問(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 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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/66488.html
摘要:原文地址學(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è)人博客 幾乎所有的編程...
摘要:一前言上一篇已經(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ò)的地方希望大家...
摘要:下一篇數(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》...
摘要:題目使用棧實(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ì)...
摘要:下面是入棧時(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...
閱讀 3050·2021-11-23 10:12
閱讀 2768·2021-11-23 09:51
閱讀 2102·2021-11-15 11:37
閱讀 1556·2019-08-30 15:55
閱讀 2025·2019-08-29 15:40
閱讀 1226·2019-08-28 18:30
閱讀 1706·2019-08-28 18:02
閱讀 2698·2019-08-26 12:00