日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构期末复习

發布時間:2024/8/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构期末复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

zzulier的數據結構期末復習

數據結構期末復習

    • **zzulier的數據結構期末復習**
  • 第一章 緒論
    • 1.基本概念和術語
    • 2.算法和算法分析
  • 第二章 線性表
    • 1.線性表的類型定義
    • 2.線性表的順序表示和實現
    • 3.線性表的鏈式表示和實現
  • 第三章 棧和隊列
    • 1.棧
    • 2.隊列
  • 第四章 串
  • 第五章 數組和廣義表
    • 矩陣的壓縮存儲
  • 第六章 樹和二叉樹
    • 1.樹的遍歷&線索二叉樹
    • 2.樹<——>二叉樹<——>森林(互相轉化)
    • 3.赫夫曼樹&赫夫曼編碼
  • 第七章 圖
    • 1.鄰接矩陣&鄰接表
    • 2.深度、廣度優先遍歷
    • 3.最小生成樹(Prim&克魯斯卡爾算法)
    • 4.拓撲序列
    • 5.關鍵路徑
  • 第九章 查找
    • 1.線性表的查找
    • 2.有序表的查找
    • 3.樹表的查找
    • 4.散列表的查找
  • 第十章 排序
    • 1.插入排序
    • 2.交換排序
    • 3.選擇排序
    • 4.歸并排序

第一章 緒論

1.基本概念和術語

(1)數據結構:是互相之間存在一種或多種特定關系的數據元素的集合。
(2)數據、數據元素、數據對象、數據項概念辨析
①首次需要明確的是:數據>數據元素>數據項
(例:學生表>個人信息>某一信息)
②關系圖:若將數據看做一個集合,那么有以下關系:

(3)數據結構包含:邏輯結構&存儲(物理)結構

  • 邏輯結構:數據元素之間的邏輯關系。
  • 存儲(物理)結構:數據元素及其關系在計算機內存中的表示(映像)。
    ①邏輯結構的劃分:線性結構&非線性結構
    ②四種基本的邏輯結構:集合、線性結構、樹、圖
    ③四種基本的存儲結構:順序存儲結構、鏈式存儲結構、索引存儲結構、散列存儲結構(平時講課及考試僅針對前兩種)
    切記:一個數據結構的邏輯結構是唯一的,其存儲結構不唯一!!!
    (4)抽象數據類型(不用重點掌握)
    用三元組(D,S,P)表示:
  • D:數據對象
  • S:D上的關系集
  • P:對D的基本操作集

2.算法和算法分析

(1)算法特征:有窮性、確定性、可行性、輸入、輸出
(2)算法效率
①包括:時間效率&空間效率
②用所消耗的時間來度量:事后統計(實際測算)、事前分析(估計)。
③算法的漸進時間復雜度(僅比較數量級)
切記:隨著n的增大,T(n)的增長較慢的算法為最優的算法!!!
算法時間效率的比較:
時間復雜度T(n)按數量級遞增順序即復雜度由低到高:

名稱復雜度
常數階O(1)
對數階O(log2n)
線性階O(n)
線性對數階O(nlog2n)
平方階O(n*n)
k次方階O(n*…*n)
指數階O(2的n次方)

⑤空間復雜度:算法所需存儲空間的度量(非重點)

  • 算法要占據的空間包括算法兩部分:本身要占據的空間&算法要使用的輔助空間。

第二章 線性表

1.線性表的類型定義

(1)線性表是由n個類型相同數據元素組成的有限序列。
(2)線性表是一種最簡單的數據結構,因為數據元素之間是由一前驅一后繼的直觀有序的關系確定,即線性表中相鄰的數據元素之間存在著序偶關系。
(3)線性表的邏輯結構為線性結構,存儲結構為順序存儲或鏈式存儲

2.線性表的順序表示和實現

(1)線性表的順序存儲結構
①順序存儲定義:把邏輯上相鄰的數據元素存儲在物理上相鄰的存儲單元中的存儲結構。
②順序存儲方法:用一組地址連續的存儲單元依次存儲線性表的元素,可通過數組來實現。
③線性表順序存儲特點:
·邏輯上相鄰的數據元素,其物理上也相鄰。
· 可以實現隨機存取: 設首元素a1的存放地址為LOC(a1)(稱為基地址或起始位置),設每個元素占用存儲空間(地址長度)為L字節,則表中任一數據元素的存放地址為:LOC(ai) = LOC(a1) + L *(i-1)
(2)線性表的順序存儲結構上的基本運算
首先,給出描述

#define LIST_INIT_SIZE 100//存儲空間的初始分配量 #define LISTINCREMENT 10//存儲空間的分配增量 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct { ElemType *elem;//存儲空間基址 int length;//線性表長度 int listsize;//數組空間大小 } SqList;

①初始化操作
· 為三要素(首地址、長度、空間大小)賦初值

Status InitList_Sq(SqList &L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE)*sizeof(ElemType); if(!L.elem) exit(OVERFLOW);//存儲分配失敗 L.length = 0;//空表長度為0 L.listsize = LIST_INIT_SIZE;//初始存儲容量 return OK; }

②插入操作

  • 插入前兩判斷:i值是否合法&存儲空間是否已滿
  • 插入時一循環:將第n至i位的元素依次向后移動&將要插入的元素寫到第i個位置
  • 插入完一切記:表長+1
Status ListInsert_Sq(SqList &L,int i,ElemType e) //在順序線性表L中的第i個位置之前插入新的元素e { if (i<1||i>=length+1) return ERROR;//i值不合法 //插入時i的合法值為:1<=i<=length(L)+1 if(L.length>=L.listsize)//若當前存儲空間已滿,要增加分配{newbase = (ElmeType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem = newbase;//新基址賦值L.listsize += LISTINCREMENT;//增加存儲容量} q = &(L.elem[i-1]);//q為插入位置 for(p = &(L.elem[L.length-1]));p>=q;--q){*(P+1) = *p;//插入位置及之后的元素后移*q = e;//插入e} ++L.length;//表長增1 return ok; }

③刪除操作

  • 刪除前一判斷:i值是否合法
  • 刪除時一循環:將第i+1至n位的元素依次向前移動
  • 刪除完一切記:表長-1
Status ListDelete_Sq(SqList &L,int i,ElemType &e) //在順序線性表L中刪除第i個元素,并用e返回其值 { if (i<1||i>length) return ERROR;//i值不合法 //刪除時i的合法值為:1<=i<=length(L) p = &(L.elem[i-1]);//取第i個元素的地址,即p為被刪除元素的位置 //或p = L.elem+i-1; e = *p;//用e返回其值 q = L.elem+L.length+1;//表尾元素的位置 for(++p;p<=q;++p){*(p-1) = *p;//將第i+1至第n位的元素向前移動一個位置,即被刪除元素之后的元素前移} --L.length;//表長減1 return ok; }

③查找操作(在順序表中查找元素)

int LocateElem_Sq(SqList L,ElemType e, Status(*compare)(ElemType, ElemType)){ //在順序線性表L中查找第1個值與e滿足compare()的元素的位序,找到返回其在L中的位置,否則返回0int i=1;//i的初值為第一個元素的位序p=L.elem;//p的初值為第一個元素的存儲位置while (i<=L.length && !(*compare)(*p++,e)) ++i;if (i<=L.length)return i;else return 0; }

(3)線性表的順序存儲結構的優缺點
①優:

  • 無需為表示結點間的邏輯關系而增加額外的存儲空間(因為邏輯上相鄰的元素其存儲的物理位置也是相鄰的);
  • 可方便地隨機存取表中的任一元素。

②缺:

  • 插入或刪除運算不方便,除表尾的位置外,在表的其它位置進行插入或刪除操作都必須移動大量的結點,其效率較低;
  • 需要預分配空間(可能導致浪費);
  • 表的擴充不方便。

3.線性表的鏈式表示和實現

(1)線性表的鏈式存儲結構
①用一組任意的存儲單元存儲線性表的數據元素(可以連續,也可以不連續)
②利用指針實現用不相鄰的存儲單元存放邏輯上相鄰的元素
③結點包含兩個域:數據域(數據元素本身信息)&指針域(指示直接后繼的存儲位置)
④頭指針、頭結點、首元結點概念辨析
· 首元結點:是鏈表中存儲線性表第一個數據元素a1的結點
· 頭結點:是在鏈表的首元結點之前附設的一個結點
· 頭指針:是指向鏈表中第一個結點的指針

切記:單鏈表可由一個頭指針唯一確定!!!
ps:在鏈表中設置頭結點有什么好處??
解答:頭結點是在鏈表的首元結點之前附設的一個結點,該結點的數據域中不存儲線性表的數據元素,其作用是為了對鏈表進行操作,可以對空表、非空表的情況以及對首元結點進行統一處理,編程更方便。
(2)線性表的鏈式存儲結構上的基本運算
首先,給出結點描述

typedef struct LNode { ElemType data;//數據域 struct LNode *next;//指針域 }LNode,*LinkList//LinkList為結構指針類型

解釋:假設L是LinkList型的變量,則L是一個結構指針,即單鏈表的頭指針,它指向表中第一個結點(對于帶頭結點的單鏈表,則指向單鏈表的頭結點),若L=NULL(對于帶頭結點的單鏈表為L->next=NULL),則表示單鏈表為一個空表,其長度為0。若不是空表,則可以通過頭指針訪問表中結點,找到要訪問的所有結點的數據信息。對于帶頭結點的單鏈表L,p=L->next指向表中的第一個結點a1,即p->data=a1,而p->next->data=a2。其余依此類推。

①查找操作

  • 查找前兩初始:p指針初始化為首元結點&計數器j=1
  • 查找時一循環:順指針向后查找 p = p->next
  • 查找完一判斷:判斷第i個元素是否存在
Status GetElem_L(LinkList L,int i,ElemType &e) //L為帶頭結點的單鏈表的頭指針,當第i個元素存在時,其值賦給e并返回OK,否則返回ERROR { p = L->next;//初始化,p指向第一個結點 j = 1;//j為計數器 while(p&&j<i)//順指針向后查找,直到p指向第i個元素或p為空{p = p->next;++j;} if(!p||j>i) return ERROR;//第i個元素不存在 e = p->data; return OK; }

②插入操作
核心任務:“連上兩條鏈”
鏈①:p->next = s->next
鏈②:p->next = s

Status ListInsert_L(LinkList &L, int i, ElmeType e ) //帶頭結點的單鏈線性表L中第i個位置之前插入元素e {p=L; j=0; while( p && j<i-1)//該循環的目的:尋找第i-1個結點{ p=p->next;++j;}if( !p || j>i-1) return ERROR;//i小于1或大于表長加1s=(LinkList)malloc(sizeof(LNode));//生成新結點s->data=e;//為新結點的數據域賦值s->next=p->next; p->next=s;//插入操作(這兩步驟次序不可互換!!!互換會導致ai的地址丟失)return OK; }

③刪除操作
核心任務:“連一條鏈”
令q指向被刪除結點:q = p->next
鏈①:p->next = q->next

Status ListDelete_L(LinkList &L, int i, Elemtype &e) //在帶頭結點的單鏈線性表L中,刪除第i個元素,并由e返回其值 {p=L;j=0;while ( p->next && j<i-1)//該循環目的:尋找第i個結點,并令p指向其前驅{p=p->next; ++j;}if ( !(p->next) || j>i-1) return ERROR ;//刪除位置不合理q = p->next; p->next=q->next;//刪除結點e = q->data; //由e返回其值free(q);//釋放結點空間return OK; }

④頭插法建立單鏈表

  • 建立空表:L->next = NULL;//建空表
  • 核心任務:“連接鏈①” 即 p->next=L->next; L->next=p; //插入結點
void CreateList_L(LinkList &L, int n) //逆位序輸入n個元素的值,建立帶表頭結點的單鏈線性表L {L= (Linklist) malloc(sizeof(Lnode));//申請頭結點L->next = NULL;//建空表for(i = n; i>0; --i){p=(LinkList)malloc(sizeof(Lnode));//申請新結點scanf(&p->data);p->next=L->next; L->next=p;//插入結點} }

⑤尾插法建立單鏈表

void CreateList_L(LinkList &L, int n){L= (Linklist) malloc(sizeof(Lnode));L->next = NULL;LinkList r = L;for(i = n; i>0; --i){p=(LinkList)malloc(sizeof(Lnode));scanf(&p->data);r->next=p;r = r->next; p->next=Null;} }

(3)循環鏈表(循環鏈表的操作和線性鏈表基本一致)
①有時候若在循環鏈表中設立尾指針而不設頭指針,可以簡化操作,比如將兩個線性表合并成一個表的時候,僅需將一個表的表尾和另一個表的表頭相接。(我們那年考試簡答題)
(4)雙向鏈表(了解一下應該就可以)

第三章 棧和隊列

(這一章重點掌握棧和隊列的特點就可以了)

1.棧

(1)特點:后進先出
(2)考題形式(我們就考了一個選擇題)
【例】對于棧來講,若輸入 A,B,C,D,同時在插入的時候也可能進行刪除操作。可能的輸出序列為?

2.隊列

特點:先進先出

第四章 串

(這一章沒什么重點,了解一下模式匹配就可以了)
1.串是內容受限的線性表
2.關于模式匹配:
(1)模式匹配是干嘛的(我們那年的一個選擇題):子串的定位操作通常稱作串的模式匹配(其中T被稱為模式串),是各種串處理系統中最重要的操作之一。
(2)KMP算法(大概了解就行)

第五章 數組和廣義表

(這一章復習的時候重點看壓縮存儲!)

矩陣的壓縮存儲

(1)概念:為多個值相同的元只分配一個存儲空間,對零元不分配空間。
(2)特殊矩陣
①對稱矩陣:僅存下(上)三角(包括主對角線)的數據元素
②三角矩陣:k和aij存在著一一對應關系
·下三角:即i>=j時,k = i*(i-1)+j-1
·上三角:即i<=j時,k = j*(j-1)+i-1
③帶狀矩陣(對角矩陣)
eg:三對角矩陣:
i<j:k=3i-4
i=j:k=3i-3
i>j:k=3i-2
(3)在壓縮存儲結構下實現矩陣轉置(弄懂兩種方式,非重點)

第六章 樹和二叉樹

(這一章直接上題!!)

1.樹的遍歷&線索二叉樹


2.樹<——>二叉樹<——>森林(互相轉化)

(1)樹和二叉樹的轉化

(2)二叉樹和森林的轉化

3.赫夫曼樹&赫夫曼編碼


注:①一般考試題還會讓計算一下WPL
②當題目給出要傳輸字符串的時候,切記空格,不要把空格忘掉!!!

第七章 圖

1.鄰接矩陣&鄰接表

2.深度、廣度優先遍歷

3.最小生成樹(Prim&克魯斯卡爾算法)

綜合1、2、3,給出一道大題:

4.拓撲序列

5.關鍵路徑

綜合4、5,先放出我的小筆記,再給出一道大題

第九章 查找

1.線性表的查找

2.有序表的查找

:順序表和有序表有什么不同,折半查找為什么用順序存儲(我們當時考試的簡答題,建議百度,總結答案)

3.樹表的查找

(1)二叉排序樹
(2)平衡二叉樹:LL型、RR型、LR型、RL型
我的筆記:


建議:老師上課講的例題以及課件上面的例題搞明白之后再去找題練習!

(3)B-樹

注:還有一種類型的考題會給出一棵已知樹,依次進行插入、刪除操作

4.散列表的查找



第十章 排序

1.插入排序

(1)直接插入排序
(2)二分插入排序
(3)希爾排序

2.交換排序

(1)冒泡排序(起泡排序)
(2)快速排序

3.選擇排序

(1)簡單選擇排序
(2)堆排序

4.歸并排序

我的考前復習小筆記(關于排序建議看B站一個青島大學老師講的課,直接搜數據結構應該就可以看到它啦):



關于期末考試(我們當時的):
①試卷分布:選擇題10、簡答題2、應用題6、編程題2
②書上和課件里面的例題很重要!

寫此博客,僅作為本人對數據結構的小結,如有錯誤,還望指正!

總結

以上是生活随笔為你收集整理的数据结构期末复习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情综合五月 | 99er在线观看 | 午夜精品久久久久久久久久蜜桃 | 久久免费视频2 | 丁香六月激情综合 | 91久久精品无码一区二区 | 岳狂躁岳丰满少妇大叫 | av鲁丝一区鲁丝二区鲁丝三区 | 青青草视频国产 | 欧美精品自拍 | 日本理论中文字幕 | 国产又爽又猛又粗的视频a片 | 波多野结衣电影在线播放 | 亚洲aaa视频 | 一级黄色片在线看 | 91视| 99精品一区二区三区 | 欧美怡春院| 日本视频一区二区 | 国产一区二区三区视频免费观看 | 热热久 | 亚洲超碰在线 | 久久精品夜 | 久色视频在线观看 | 亚洲精品无码永久在线观看 | 午夜少妇 | 中文字幕第2页 | 欧美色成人 | 伊人在线 | 99国产精品自拍 | www.色多多 | 日本少妇喷水视频 | 国产喷白浆一区二区三区 | 亚洲av成人精品日韩在线播放 | 欧美永久精品 | 亚洲av无码不卡一区二区三区 | 欧美一级免费 | 三级久久久| 成人动漫在线观看视频 | 国产美女精品在线 | 日本一二区视频 | 日韩永久免费视频 | 免费观看视频一区二区 | 亚洲精品一级 | 强迫凌虐淫辱の牝奴在线观看 | 自拍偷拍五月天 | 青青在线 | 国产免费一区二区三区在线播放 | av在线免播放器 | 妺妺窝人体色www聚色窝仙踪 | 日本伦理一区二区 | 日韩视频一区二区在线观看 | 国产一区伦理 | 久久99网站 | 一区二区三区高清在线观看 | 中文字幕av一区二区三区 | 亚洲日本中文 | 日本午夜影院 | 日本一区二区在线观看视频 | 97理伦| 24小时日本在线www免费的 | 日韩三级麻豆 | av大片在线看| 一区二区日韩电影 | 日韩欧美亚洲在线 | 少妇视频一区二区三区 | 色图一区 | 在线看的网站 | wwwwww在线观看 | 林雅儿欧洲留学恋爱日记在线 | 欧美日韩在线观看视频 | 热热色原网址 | 国产第113页 | 爱爱15p| 五月婷婷一区二区 | 殴美一区二区 | 国产精品视频大全 | 亚洲色域网 | 天堂av官网 | 中文字幕在线二区 | 成人宗合网 | 五月婷婷影院 | 成人18在线| 国产高清一区二区 | av优选在线观看 | 九九热精品视频在线播放 | 免费av网站观看 | 日韩综合色 | 日本黄xxxxxxxxx100 | 放荡闺蜜高h苏桃情事h | 一级女性全黄久久生活片免费 | 欧美 变态 另类 人妖 | 一区中文字幕 | 成人精品福利视频 | 久久爱影视 | 五月天激情视频在线观看 | av在线播放国产 | 亚洲第一色站 | 九九热精品视频 |