資料結構概述
定義:我們如何把現實中大量而複雜的問題已特定的
資料型別和特定的儲存結構儲存到主儲存器(記憶體)中,以及
在此基礎上位實現某個功能二執行的相應操作,
這個相應的操作也叫演算法。
資料結構解決儲存問題,演算法解決資料間的關係。
資料結構=個體+個體的關係
演算法=對儲存資料的操作。
狹義的演算法
演算法:解題的方法和步驟
衡量演算法的標準:1時間複雜度
大概程式要執行的次數,而非執行
的時間:執行步驟最多的最關最核心的要執行的次數
可以大概代表
2空間複雜度:演算法執行過程中大概
所占有的最大記憶體。
3 難易程度
4健壯性
前兩個最重要
(一般演算法有迴圈)
第三個內容:資料結構的地位
(資料結構是軟體中最核心的課程)
資料庫和資料結構的區別:
資料庫是資料結構的簡化版
程式:資料的儲存+資料段操作+可以被計算機之行的語言
預備知識:
偽演算法不是真正的演算法
通過語言來實現偽演算法,希望程式語言實現要通過指標。
鍊錶的知識很重要,以後都會用到。c++的指標不夠,學
c語言的用途是為了以後能看懂更高階的語言
*p就代表乙個變數,例如i 。int*p表示定義乙個存放整
形變數的位址的指標變數。
程式執行完,記憶體就終止了。
複習:1:指標:
int *p//p 是個變數名字,用來存放位址,只能儲存int型變數的位址
指標的重要性:是c語言的靈魂,
定義位址記憶體單元的編號(cpu只能訪問記憶體,不能訪問硬碟)
從0開始的非負整數,範圍為0——4g-1
指標就是位址,位址就是指標
指標變數是存放記憶體單元位址的變數
指標和指標變數不一樣
指正的本質是乙個操作受限的非負整數
分類:1 基本型別的指標(p=&i表示指標變數儲存i的位址,但是p為p,i為i兩者無任何關係,
但是*p和i卻是等效的兩者可以互換)
22:指標結構體
3:動態記憶體的分配和釋放。
4:記憶體的基本單位是位元組
5:&為取位址符號
6:# include <>
void f(int *p)
int main()
@@如何實現被掉函式修改主調函式中普通變數的值
1:實參為相關變數的位址(&i)
2:形參為以該變數的型別(int型)為型別的指標變數(指標變數p)
3:在被調函式中通過 *形參變數名的方式就可以修改主函式中普通變數的值
(*p和i可以等效替換兩者無任何區別)
指標和陣列(array)
陣列名 一位陣列名a是個指標常量
它存放的是一維陣列第乙個元素的位址,
它的值不能被改變
一維陣列名指向的是陣列的第乙個元素。
下表和指標的關係
a[i]<<==>>*(a+i)下標和指標的關係
假設指標變數的名字為p
則p+i的值是p+i*(p所指向的變數所佔的位元組數)
指標變數的運算
指標變數不能相加,乘除。
如果兩指標變數屬於同一陣列,則可以相減
指標變數可以相減一整數,前提是最終結果不能草果指標的範圍
p+i的值是p+i*(p所指向的變數所佔的位元組數)
p-i的值是p-i*(p所指向的變數所佔的位元組數)
p++《==》p+1
如何通過被調函式修改主函式中一位陣列的內容
兩個引數
存放陣列首元素的指標變數
存放陣列元素長度的整形變數
# include《
void show-array(int *p ,int len)
int main (void )
;show_arraya(a,5)//a等價於&a[0],&a[0]本身就是int *型別
return 0
}乙個double佔八個位元組,乙個位元組是8位,美乙個位元組都佔乙個位址。
指標變數都只佔四個位元組
p=&x 表示p只代表x的第乙個位元組的位址
如何通過函式修改時慘的值
#include <>
void f(int * q)//函式宣告
int main (void)
void f( int **q)
如果想改寫乙個變數的值,只需要傳送它的位址給被掉函式,否則無法實現對主函式中變數的值的改變。
結構體:
為什麼會出現結構體:為了表示一些複雜的資料,而普通的基本型別變數無法滿足要求
什麼叫結構體:(是 c++中類的過度)是使用者根據實際需要自己定義的復合資料型別
如何使用結構體:struct student=;
結構體 struct sudent * pst =&st;
1;2.
pst->sid
pst所指向的結構體中的sid這個成員
注意事項;結構體變數不能加減乘除,但是可以相互賦值
普通結構體變數和結構體指標變數作為函式傳參的問題
#include<>
#include<>//一串,一行
struct 結構體student
;//分號不能省
int main(void)
; printf("%d %s %d\n",
strcpy("lisi");"lisi";error
printf("%d %s %d\n",
//printf("%d %s %d\n",st);
return 0;
}結構體2
#include<>
#include<>//一串,一行
struct 結構體student
;//分號不能省
int main(void)
; 第一種方式
struct student* pst;//定義乙個指標變數,此指標變數只能存放我們自己定義的struct student型別的變數的位址
pst=&st;
pst->sid=99;//pst->sid等價於(*pst).sid 而(*pst).sid等價於所以pst->sid=
return 0;
}第八次課:
結構體:
1:為什麼會出現結構體
為了表示一些複雜的資料,而普通的基本型別變數無法滿足要求
2:什麼叫做結構體
使用者根據實際需要自己定義的復合資料型別
3:如何使用結構體
演算法1:
# include<>
struct student
;int main ()
; printf ("%d %s %d\n",
return 0;
}輸出結果:
2013213990 wangchuankun 2
請按任意鍵繼續. . .
有兩種方式:
1:4:注意事項
結構提變數不能加減乘除,但是可以相互賦值。
結構提變數和結構體指標變數作為函式傳參
演算法2:演算法目的:通過結構體呼叫指標給主函式中結構體變數賦值
#include <>
#include <>
struct student
;void f(struct student *pst)
int main ()
執行結果:
2013213990 wangchuankun 22
請按任意鍵繼續. . .
演算法3:演算法目的:通過結構體呼叫指標給主函式中結構體變數賦值
並且通過函式呼叫將主函式中的結構體變數依次輸出。
#include <>
#include <>
struct student
「資料結構」串講筆記
課程 21049 適用專業 計算機應用 計算機網路 串講教師 北京航空航天大學唐髮根 考試題型 第一部分選擇題 一 單項選擇題 每小題2分,共20分 第二部分非選擇題 二 填空題 每空2分,共20分 三 簡答題 15分 四 問題求解題 每小題10分,共20分 五 演算法填空題 25分 第一章緒論 主...
資料結構與拓撲資料結構
資料結構在gis中對於資料的採集 儲存 查詢 檢索和應用分析等操作方式有著重要的影響,一種高效率的資料結構應該具備以下幾個要求 1 組織的資料能夠表示要素之間的層次關係,便於不同資料聯絡於覆蓋 2 正確反映地理實體之間的空間排列方式和各實體之間的相互關係 3 便於訪問與檢索 4 節省儲存空間,減少資...
資料結構課後答案老師給的
第一章習題答案 2 3 1 包含改變量定義的最小範圍 2 資料抽象 資訊隱蔽 3 資料物件 物件間的關係 一組處理資料的操作 4 指標型別 5 集合結構 線性結構 樹形結構 圖狀結構 6 順序儲存 非順序儲存 7 一對 一 一對多 多對多 8 一系列的操作 9 有限性 輸入 可行性 4 1 a 2 ...