郝斌的数据结构学习笔记(1)概述,算法,指针的概念,结构体,线性结构,离散存储,链表
數據結構概述(教材選用嚴蔚敏、吳偉民,該書程序是偽算法
具體的程序是高一凡,西電的,大牛,只有
程序。還有一本書,臺灣的黃國瑜自己寫的
只有思路,程序是另外一個合作的清華的寫
的,可惜很多錯的。)
學完數據結構之后會對面向過程的函數有一個更深的了解
定義
我們如何把現實中大量而復雜的問題以特定的數據類型(單
個數據怎樣存儲?)和特定的存儲結構(個體的關系)
保存到主存儲器(內存)中,以及在此基礎上為實現某個功能
(比如查找某個元素,刪除某個元素,對所有元素進行排序)
而執行的相應操作,這個相應的操作也叫算法。(比如班里有
15個人,其信息量也許一個數組就搞定了,但是假如10000個,
怎么辦?內存也許沒有這么多連續的空間,所以我們改用鏈表,
you see這就是與存儲有關系。又比如,人事管理系統的信息存儲,
因為存在著上下級的關系,所以數組和鏈表就無能為力了,
這時候我們用樹,再比如我們做的是交通圖,站和站之間肯定要連通,這
時候以上的存儲方式又無能為力了,所以我們又有了圖。圖
就是每個結點都可以和其他結點產生聯系。所以當我們要解決
問題時,首先要解決的是如何把這些問題轉換成數據,先保存
到我們的主存中,)
算法
解題的方法和步驟
(學完數據結構,想用一種語言去實現它,必須有指針,數據結構java
版,就胡扯,變味,因為我們要講鏈表,就是通過指針鏈在一起的。比如
在java中A aa = new A();本質上,aa是個地址)
預備知識
指針
指針的重要性:(內存是可以被CPU直接訪問的,硬盤不行
主要靠地址總線,數據總線,控制總線。)
指針是C語言的靈魂
定義
地址
地址就是內存單元的編號
從0開始的非負整數
范圍:0–FFFFFFFF[0-4G-1](地址線是32位,剛好控制2的32次)
指針:
指針就是地址 地址就是指針
指針變量是存放內存單元地址的變量
指針的本質是一個操作受限的非負整數(不能加乘除,只能減)
分類:
1、基本類型的指針
(病毒就是靠訪問正在運行的那些程序所占用的內存。Java中規定局部
變量必須初始化,因為這些變量一開始都是垃圾值,但是屬性不是必須
初始化的,因為已經默認初始化為0)
動態內存分配和釋放(動態分配的內存一定要手動釋放,否則造成內存
泄露。)
(java中A aa = new A();其實就是 A *p = (A *)malloc(sizeof(A)))
模塊一:線性結構【把所有的結點用一根直線穿起來】
連續存儲【數組】
1、什么叫做數組
元素類型相同,大小相等(數組傳參,只要傳進去首地址和長度就行)
2、數組的優缺點:
優點:
存取速度快
缺點:
事先必須知道數組的長度
插入刪除元素很慢
空間通常是有限制的
需要大塊連續的內存塊
插入刪除元素的效率很低
(頭結點有可能很大,占的內存可能大,假設我想造一個函數
輸出所有鏈表的值,那你如果不用頭指針類型做形參,那由于
不同鏈表的頭節點不一樣大小,這樣就沒辦法找出形參)
(鏈表的程序最好一定要自己敲出來)
分類:
單鏈表
雙鏈表:
每一個節點有兩個指針域
(java中變成垃圾內存則會自動釋放,但是C和C++則不會,所以要
手動釋放,否則會引起內存泄露。delete等于free)
算法:
遍歷
查找
清空
銷毀
求長度
排序
刪除節點
插入節點
總結
以上是生活随笔為你收集整理的郝斌的数据结构学习笔记(1)概述,算法,指针的概念,结构体,线性结构,离散存储,链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hash函数的构造方法
- 下一篇: 关于视频分析技术在工业工程中的应用:EC