20162329 張旭升 2017 - 2018 《程序設計與數據結構》第五周總結

20162329 2017-2018-1 《程序設計與數據結構》第五周學習總結

教材學習內容總結

1.學習目標

  • 了解集合的概念

  • 了解并使用抽象數據類型

  • 初步了解使用Java泛型

  • 學習棧這種數據結構

  • 用數組、鏈表實現棧

2.學習內容

集合的概念:

集合是手機并組織其他對象的對象,他定義了訪問和管理那些稱為集合元素的其他對象的一種具體方式。在我們所學習的Java編程語言的龐大類庫中,Java Collections API 就表示了一些使用不同方式實現的幾類集合的類。

抽象數據類型:

事物的抽象往往可以隱藏其中大部分細節,只需要通過一些小的接口就可以控制一個龐大的體系,所以在編程時抽象的思維是非常重要的,當你需要將一件事情用編程的方法實現的時候,首先要做的是將這件事情抽象出一些接口,就拿車來舉個例子:

首先車是一個龐大的體系,但是我們在控制車的時候卻并沒有去考慮車的內部零件是如何運作的,我們只是同過方向盤,踏板等來實現對它的控制,而這些我們實在知道的就是智造車的人給我們提供的接口。這樣以來用戶在使用它的時候就不需要考慮應該用哪個零件帶動哪個零件它才能轉彎這種實際問題。
這樣看我們的類也是一樣的,我們只是提供給用戶一些看的到的方法(函數),用戶通過這些方法的使用就能調用一個龐大的類,而并不需要去考慮類中的邏輯。

泛型

泛型是在Java 5.0后才開始支持基于泛型來定義類的,泛型的作用是在我們實例化類的對象時可以同時制定一種儲存數據的類型,這樣就避免了我們要為不同的被儲存類創建多個相應類型的類,大大減少了代碼復用,增加了代碼的可用能力,而這種方法在我們的Java Collections API 中尤其有用,因為既然是集合就必定需要儲存元素,但是每次用戶用來存儲的元素不可能都是一種類型,這時泛型的作用就大大體現。

棧也是集合中的一種,他的模型就類似于現實中的羽毛球桶一樣,每次放置的羽毛球都只能放在前一個羽毛球的后面, 每次取羽毛球的時候只能從后面取最后一個放進去的,也就是一種LIFO結構

3.用數組、鏈表實現棧

  • 數組實現棧 ArrayStack

           public class ArrayStack<T> implements Stack<T>{private final int DEFAULT_CAPACITY = 100;private int num;private T[] stack;public ArrayStack(){num = 0;stack = (T[])(new Object[DEFAULT_CAPACITY]);}public ArrayStack (int lenth){num = 0;stack = (T[])(new Object[lenth]);}public void push (T element){if (size() == stack.length)expandCapacity();stack[num] = element;num++;}public T pop() throws Exception{if (isEmpty())throw new Exception("Stack is empty");num--;T result = stack[num];stack[num] = null;return result;}public T peek() throws Exception{if (isEmpty())throw new Exception("Stack is empty");return stack[num -1];}public boolean isEmpty(){return (num == 0);}public int size(){return num;}public String toString(){String result = "";for (int scan = 0; scan < num; scan++)result = result + stack[scan].toString() + "\n";return result;}private void expandCapacity(){T[] larger = (T[])(new Object[stack.length*2]);for (int index=0; index < stack.length; index++)larger[index] = stack[index];stack = larger;}}
  • 鏈表實現棧 LinkedStack

      public class LinkedStack<T> implements Stack<T>{private int num;private LinearNode<T> Next;public LinkedStack(){num = 0;Next = null;}public void push (T element){LinearNode<T> temp = new LinearNode<T> (element);temp.setNext(Next);Next = temp;num++;}public T pop() throws Exception{if (isEmpty())throw new Exception("Stack");T result = Next.getElement();Next = Next.getNext();num--;return result;}public T peek() throws Exception{if (isEmpty())throw new Exception("Stack");return Next.getElement();}public boolean isEmpty(){return (num == 0);}public int size(){return num;}public String toString(){String result = "";LinearNode current = Next;while (current != null){result = result + (current.getElement()).toString() + "\n";current = current.getNext();}return result;}}

Android 開發一個關于棧的小APP

界面布局:

EditText控件:輸入需要加入棧中的元素
Button控件:設置push壓棧操作和pop出棧操作
TextView控件:模擬棧的結構
1065476-20171015163545746-78432921.png

活動代碼

public class MainActivity extends AppCompatActivity{EditText editText;Button pop,push;TextView Stack;String result;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText)findViewById(R.id.in);pop = (Button)findViewById(R.id.pop);push = (Button)findViewById(R.id.push);Stack = (TextView)findViewById(R.id.Stack);final ArrayStack<String> stack = new ArrayStack<>();push.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {result = editText.getText().toString();stack.push(result);Stack.setText(stack.toString());}});pop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {try {stack.pop();Stack.setText(stack.toString());} catch (Exception e) {e.printStackTrace();}}});}
}

效果截圖

1065476-20171015163742059-1128482171.png

代碼托管

1065476-20171015162809855-1875949475.png

結對及互評

#### 本周并沒有在結對方面有什么合作項目

點評模板:

  • 博客中值得學習的或問題:
    • 界面很好看
    • 問題分析可以更詳細
  • 其他
    希望我們結對在這學期能相互促進,技術更上一層樓。

    本周結對學習情況

    • 20162302
    • 結對學習內容
      • 一起討論學習。

其他

這學期的課程難度增加了很多,有些時候感覺自己學到的東西還不扎實,導致有時候做一些懂非常困難,就算最終解決了也會花費很長時間,效率很低,希望能盡快適應新方式新進度。

學習進度條

代碼行數(新增/累積)博客量(新增/累積)學習時間(新增/累積)重要成長
目標5000行30篇400小時
第一周0/2001/210/20了解數據結構及算法
第二周664/5002/310/20系統的學習了查找和排序
第五周1333/10002/215/20棧數據結構的學習

參考資料

  • 《Java程序設計與數據結構教程(第二版)》

  • 《Java程序設計與數據結構教程(第二版)》學習指導
  • ...

轉載于:https://www.cnblogs.com/Zhangxusheng/p/7671164.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos 安裝trace_前期的準備工作-MacOS Mojave 10.14.3 下安裝CentOS 7及Bochs 002

MacOS Mojave 10.14.3 下使用虛擬機安裝CentOS 7 以及 Bochs 2.6.9CentOS 7.6.1810 系統下 安裝Bochs 2.6.91 下載CentOS 7.6.1810網址為https://www.centos.org/遇到的問題安裝后無法使用使用網絡&#xff0c;最簡單的解決方法就是增加一個新的網絡適配器&#xff0c;使用Nat共…

js中的extend的用法及其JS中substring與substr的區別

1. JS中substring與substr的區別 之前在項目中用到substring方法&#xff0c;因為C#中也有字符串的截取方法Substring方法&#xff0c;當時也沒有多想就誤以為這兩種方法的使用時一樣的。這樣就直接按照在C#中使用Substring的方式&#xff0c;直接在js中用了substring&#…

事件處理程序

轉載于:https://www.cnblogs.com/ypx666/p/10869448.html

fis3 配置文件

1 代碼: fis.match(*.less, {// fis-parser-less 插件進行解析parser: fis.plugin(less),// .less 文件后綴構建后被改成 .css 文件rExt: .css });// 配置配置文件&#xff0c;注意&#xff0c;清空所有的配置&#xff0c;只留下以下代碼即可。 fis.match(*.{png,js,css}, {rel…

核心指導網絡由任務編碼器_如何在現實世界中與實際用戶一起指導您的編碼和編碼生涯...

核心指導網絡由任務編碼器by Bob Berry由Bob Berry 如何在現實世界中與實際用戶一起指導您的編碼和編碼生涯 (How to guide your coding and your coding career with real users, in the real world) Experience drives everything. It’s the basis of our reality. It’s a…

脈沖時間寬度c語言,基于AT89C52脈沖寬度測量儀的設計與實現

趙翠玉摘要&#xff1a;本文基于AT89C52的脈沖寬度測量儀的設計。該儀器測量結果采用了軟件數字濾波&#xff0c;消除了測量中抖動問題&#xff0c;測量精度高、穩定性好&#xff0c;具有一定的實用性。關鍵詞&#xff1a;AT89C52;測量儀;脈沖寬度中圖分類號&#xff1a;TM935.…

leetcode1433. 檢查一個字符串是否可以打破另一個字符串(貪心算法)

給你兩個字符串 s1 和 s2 &#xff0c;它們長度相等&#xff0c;請你檢查是否存在一個 s1 的排列可以打破 s2 的一個排列&#xff0c;或者是否存在一個 s2 的排列可以打破 s1 的一個排列。 字符串 x 可以打破字符串 y &#xff08;兩者長度都為 n &#xff09;需滿足對于所有 …

cordova 人臉識別_html5與EmguCV前后端實現——人臉識別篇(一)

上個月因為出差的關系&#xff0c;斷更了很久&#xff0c;為了補償大家長久的等待&#xff0c;送上一個新的系列&#xff0c;之前幾個系列也會抽空繼續更新。大概半年多前吧&#xff0c;因為工作需要&#xff0c;我開始研究圖像識別技術。OpenCV在這方面已經有了很多技術積累&a…

[轉載] mysql 索引中的USING BTREE 的意義

索引是在存儲引擎中實現的&#xff0c;因此每種存儲引擎的索引都不一定完全相同&#xff0c;并且每種存儲引擎也不一定支持所有索引類型。 根據存儲引擎定義每個表的最大索引數和最大索引長度。所有存儲引擎支持每個表至少16個索引&#xff0c;總索引長度至少為256字節。 大多數…

git-命令

git config --global user.email “郵箱” git config --global user.name ”用戶名” git init           初始化 忽略指定文件 echo "temp/" >> .gitignore echo "private_key" >> .gitginore 狀態 git status 添加 git add …

C語言 floor四舍五入,Math函數的四舍五入,Floor,Ceiling,Round的一些注意事項!...

1.Math.Round&#xff1a;四舍六入五取偶引用內容Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) //0Math.Round(0.4) //0Math.Round(0.5) //0Math.Round(0.6) //1Math.Round(0.7) //1Math.Round(0.8) //1Math.Round(0.9) //1說明&#xff1a;對於…

Command Magicks:如何使用控制臺處理文件和字符串

by Luciano Strika通過盧西亞諾斯特里卡(Luciano Strika) Command Magicks&#xff1a;如何使用控制臺處理文件和字符串 (Command Magicks: How to Manipulate Files and Strings with the Console) As developers, there are lots of repetitive things we do every day that…

dreamweaver后綴名_讓 Dreamweaver 8 支持其它擴展名的方法

有的時候&#xff0c;我們為了網站的安全考慮&#xff0c;常常會修改網站的擴展名&#xff0c;如我看到有些網站的擴展名為 *.do&#xff0c;很明顯這個擴展名是有意改掉的&#xff0c;可是改了這擴展名對于我們修改網頁來說就麻煩了&#xff0c;比如用 Dreamweaver 8 來修改的…

sublime 3143 注冊碼

請大家支持購買正版&#xff0c;或者使用Atom、Vimsublime 3143版本的注冊碼&#xff1a;—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560B…

【BZOJ1857】【SCOI2010】傳送帶 [三分]

傳送帶 Time Limit: 1 Sec Memory Limit: 64 MB[Submit][Status][Discuss]Description 在一個2維平面上有兩條傳送帶&#xff0c;每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段AB和線段CD。lxhgww在AB上的移動速度為P&#xff0c;在CD上的移動速度為Q&#xff0c;在平…

google android廣告異步加載,谷歌廣告異步代碼和同步代碼的解決方法

通常大部分人初次接觸谷歌google adsense廣告聯盟都會有疑問&#xff0c;在新建單元界面我們可以看到獲取代碼類型選項。下面是學習啦小編為大家整理的關于谷歌廣告異步代碼和同步代碼的解決方法&#xff0c;一起來看看吧!谷歌廣告異步代碼和同步代碼的解決方法選擇同步還是異步…

openssl 加密解密 指令_Shell openssl命令加密解密字符串

Linux下的 openssl 命令解密我們以在線加密網站為例 http://tool.chacuo.net/cryptdes我們選擇des cbc模式&#xff0c;密鑰為abcdefgh&#xff0c; 偏移量為12345678&#xff0c;以base64輸出結果 對hello進行加密&#xff0c;得到結果8Snw/EmQdY我們再用將在線網站改用shell命…

使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用

使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用 原文:使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用Elasticsearch的安裝 一、elasticsearch的安裝 1.鏡像拉取 docker pull elasticsearch:tag2.啟動 docker run -it -e "disc…

Spring 的持久化實例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...

2019獨角獸企業重金招聘Python工程師標準>>> 一、表&#xff08;這里用mysql&#xff0c;數據庫名為yiibai&#xff09; CREATE TABLE customer (CUST_ID int(10) UNSIGNED NOT NULL,NAME varchar(100) NOT NULL,AGE int(10) UNSIGNED NOT NULL ) ENGINEInnoDB DEFA…

開始使用gradle

前提配置gradle環境 每個gradle構建都是以一個腳本開始的。gradle構建默認的名稱為build.gradle。當在shell中執行gradle命令時&#xff0c;gradle會去尋找為build.gradle文件&#xff0c;如果找不到就會顯示幫助信息。 下面我們以經典的helloworld為例。 1、首先建立一個build…