舉例說明數據結構在網絡技術領域和實際生活中的應用

數據結構在生活中的應用算法

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。一般狀況下,精心選擇的數據結構能夠帶來更高的運行或者存儲效率。數據結構每每同高效的檢索算法和索引技術有關。數據庫

數據結構是指同一數據元素類中各數據元素之間存在的關係。數據結構分別爲邏輯結構、存儲結構(物理結構)和數據的運算。數組

數據結構包括的主要內容有數組 (Array) 棧 (Stack) 隊列 (Queue) 鏈表 (LinkedList)樹 (Tree) 圖 (Graph) 堆 (Heap) 散列表 (Hash)等。數據結構

數據結構在生活中的不少地方又有應用,在咱們的平常生活中,應用到數據結構的地方有不少地方,實例處處都是,好比說,作搜索引擎,對字符串的各類查找、索引的算法就有很高要求;作人工智能,對模式識別、搜索的要求就很高;作數據庫設計,對字典、內外排序、搜索與索引以及數據的鏈接方式都有很高要求;作通信密碼,對數論、Fourier分析有要求;等等。併發

具體內容的應用也有不少,例如:抽象數據類型可使咱們更容易描述現實世界。例:用線性表描述學生成績表,用樹或圖描述遺傳關係等;。異步

棧是數據結構中重要的線性結構,是一種特殊的線性表,只容許在表的一端進行插入或刪除操做的線性表。表中容許進行插入、刪除操做的一端稱爲棧頂,另外一端稱爲棧底。棧項的當前位置是動態的,對棧頂當前位置的標記稱爲棧項指針。當棧中沒有數據元素時,稱爲空棧。棧的插入操做稱爲進棧或入棧,棧的刪除操做稱爲退棧或出棧。棧的應用很是普遍,在平常生活中,有許多相似棧的例子,如刷洗盤子時,依次把每一個洗淨的盤子放到洗好的盤子上。至關於進棧;取用盤子時,從一摞盤子上一個接一個地向下拿,至關於出棧。在計算機中進行算術表達式的計算是經過棧來實現的。除此以外,棧還在遊戲中應用到,例如迷宮問題。數據庫設計

隊列(Queue)是運算受到限制的一種線性表。只容許在表的一端進行插入,而在另外一端進行刪除元素的線性表。隊尾(rear)是容許插入的一端。隊頭(front)是容許刪除的一端。空隊列是不含元素的空表。在平常生活中有許多「隊列「的例子,如車站售票口買票的隊伍,排在前面的人先買到票離開隊伍,後來的人則加入隊伍的末尾等候買票;其特色是「先進先出」(First In First Out)或「後進後出」(Last In Last Out)。隊列還能夠很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可採起隊列來異步插入。另外,還能夠將較慢的處理邏輯、有併發數量限制的處理邏輯,經過消息隊列放在後臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。(性能

數據結構裏最重要的兩個結構就是樹和圖。好比一個公司由上到下的成員職位、一天中要作的事、一輩子的計劃、你的目標能夠分爲一個個小的目標等等都是至關於數據結構中的樹的應用。圖是描述事物之間關係的,當你詢問GPS時,GPS系統爲何能給指出一條兩地之間的路線,這就是利用了圖的存儲和遍歷運算,求出最優解。在現實生活中不少複雜的關係均可以用圖來描述並利用圖去解決一些問題。學習

數據結構是計算機軟件和計算機應用專業的核心課程之一,在衆多的計算機系統軟件和應用軟件中都要用到各類數據結構。所以,僅掌握幾種計算機語言是難以應付衆多複雜的課題的。要想有效地使用計算機,還必須學習數據結構的有關知識。搜索引擎

數據結構解決的實際應用問題:

1.計算機處理問題的分類

(1)數值計算問題

在計算機發展初期,人們使用計算機主要是處理數值計算問題。

(2)非數值性問題

 隨着計算機應用領域的擴大和軟、硬件的發展,"非數值性問題"愈來愈顯得重要。據統計,當今處理非數值性問題佔用了90%以上的機器時間,這類問題涉及到的數據結構更爲複雜,數據元素之間的相互關係通常沒法用數學方程式加以描述。所以,解決此類問題的關鍵已再也不是分析數學和計算方法,而是要設計出合適的數據結構,纔能有效地解決問題。

2.非數值問題求解

 著名的瑞士計算機科學家沃思(N.Wirth)教授曾提出:

算法+數據結構=程序

數據結構:是指數據的邏輯結構和存儲結構

算法:是對數據運算的描述

例如電話號碼查詢問題:編一個查詢某個城市或單位的私人電話號碼的程序。要求對任意給出的一個姓名,若該人有電話號碼,則迅速找到其電話號碼;不然指出該人沒有電話號碼。

要解此問題首先構造一張電話號碼登記表。表中每一個結點存放兩個數據項:姓名和電話號碼。

要寫出好的查找算法,取決於這張表的結構及存儲方式。最簡單的方式是將表中結點順序地存儲在計算機中。查找時從頭開始依次查對姓名,直到找出正確的姓名或是找遍整個表均沒有找到爲止。這種查找算法對於一個不大的單位或許是可行的,但對一個有成千上萬私人電話的城市就不實用了。若這張表是按姓氏排列的,則可另造一張姓氏索引表,採用以下圖所示的存儲結構。那麼查找過程是先在索引表中查對姓氏,而後根據索引表中的地址到電話號碼登記表中核查姓名,這樣查找登記表時就無需查找其它姓氏的名字了。所以,在這種新的結構上產生的查找算法就更爲有效。

又好比田徑賽的時間安排問題:假設某校的田徑選拔賽共設六個項目的比賽,即跳高、跳遠、標槍、鉛球、100米和200米短跑,規定每一個選手至多參加三個項目的比賽。現有五名選手報名比賽,選手所選擇的項目如參賽選手比賽項目表所示。如今要求設計一個競賽日程安排表,使得在盡能夠短的時間內安排完比賽。

(1)爲了能較好地解決這個問題,首先應該選擇一個合適的數據結構來表示它。2表示該問題的數據結構模型圖如右下圖(圖中頂點表明競賽項目,在全部的兩個不能同時進行比賽的項目之間連上一條邊)。顯然同一個選手選擇的幾個項目是不能在同一時間內比賽的,所以該選手選擇的項目中應該兩兩有邊相連。

(2)競賽項目的時間安排問題能夠抽象爲對無向圖進行"着色"操做:即用盡量少的顏色去給圖中每一個頂點着色,使得任意兩個有邊鏈接的相鄰頂點着上不一樣的顏色。每一種顏色表示一個比賽時間,着上同一種顏色的頂點是能夠安排在同一時間內競賽的項目。由此可得:只要安排4個不一樣的時間競賽便可。時間1內能夠比賽跳高(A)和標槍(C),時間2內能夠比賽跳遠(B)和鉛球(D),時間3和時間4內分別比賽100米(E)和200米(F)。

在遊戲中,鏈表主要應用在有大規模刪除,添加的應用上。不過,它也有相應的缺點,就是查詢是順序查找,比較耗費時間,而且存儲密度較小,對空間的需求較大。若是經過對遊戲數據的一些控制,限定大規模的添加,也就是肯定了內存需求的上限,能夠應用順序表來代替鏈表,在某些狀況下,順序表能夠彌補鏈表時間性能上的損失。固然,應用鏈表,順序表仍是主要依靠當時的具體狀況。

棧和隊列是兩種特殊的線性結構,在遊戲當中,通常應用在腳本引擎,操做界面,數據斷定當中。

在遊戲中,大多數應用圖的地方是路徑搜索,在情節腳本中,描述各個情節之間的關係。

諸如此類的還有不少例子,數據結構與算法,在作遊戲程序的時候用的最多了。

好比求迷宮的最短路徑:現要求設計一個算法找一條從迷宮入口到出口的最短路徑。

相關文章
相關標籤/搜索