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


數據結構在生活中的應用

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

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

數據結構包括的主要內容有數組 (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)。

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

棧和隊列是兩種特殊的線性結構,在游戲當中,一般應用在腳本引擎,操作界面,數據判定當中。

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM