數據結構c語言版ppt
⑴ 數據結構課到底學的是什麼
相信你也在網上查過此類問題了,我給你瘦點我自己的理解吧:
數據結構講的是數據在計算機數據處理中的邏輯結構與存儲結構及其基本應用操作。
邏輯結構是指數據運算是的邏輯表示,比如a[3]={1,2,3}表示一個元素為3個的一維數組。
存儲結構是指數據在計算機內存放的形式,比如a[3]={1,2,3}在計算機里怎麼存放呢?計算機可以分配一塊連續的存儲單元一次放入1、2、3這三個元素。當計算機運算調用到a[3]時,就直接從這塊連續的存儲單元調入對應的元素。計算機還可以分配幾塊不連續的存儲單元存放這三個元素,但每個存儲單元里除了存放數據1、2、3外必須還有其他輔助信息,比如,下一個存儲單元地址,是否結束等信息。這就是存儲結構。
數據結構還會涉及到數據結構的一些應用比如查找、排序、文件等。
數據結構是學習計算機知識的基礎學科,對於後續計算機知識的進一步學習很重要,如果想在計算機方面深造的話,建議好好學習!
給你附個數據結構經典教材的目錄:
數據結構(c語言版)(附光碟1張)(清華大學計算機系列教材)
目錄
第1章 緒論
1.1 什麼是數據結構
1.2 基本概念和術語
1.3 抽象數據類型的表現與實現
1.4 演算法和演算法分析
第2章 線性表
2.1 線性表的類型定義
2.2 線性表的順序表示和實現
2.3 線性表的鏈式表示和實現
2.4 一元多項式的表示及相加
第3章 棧和隊列
3.1 棧
3.2 棧的應有和舉例
3.3 棧與遞歸的實現
3.4 隊列
3.5 離散事件模擬
第4章 串
4.1 串類型的定義
4.2 串的表示和實現
4.3 串的模式匹配演算法
4.4 串操作應用舉例
第5章 數組和廣義表
5.1 數組的定義
5.2 數組的順序表現和實現
5.3 矩陣的壓縮存儲
5.4 廣義表的定義
5.5 廣義表的儲存結構
5.6 m元多項式的表示
5.7 廣義表的遞歸演算法第6章 樹和二叉樹
6.1 樹的定義和基本術語
6.2 二叉樹
6.2.1 二叉樹的定義
6.2.2 二叉樹的性質
6.2.3 二叉樹的存儲結構
6.3 遍歷二叉樹和線索二叉樹
6.3.1 遍歷二叉樹
6.3.2 線索二叉樹
6.4 樹和森林
6.4.1 樹的存儲結構
6.4.2 森林與二叉樹的轉換
6.4.3 樹和森林的遍歷
6.5 樹與等價問題
6.6 赫夫曼樹及其應用
6.6.1 最優二叉樹(赫夫曼樹)
6.6.2 赫夫曼編碼
6.7 回溯法與樹的遍歷
6.8 樹的計數
第7章 圖
7.1 圖的定義和術語
7.2 圖的存儲結構
7.2.1 數組表示法
7.2.2 鄰接表
7.2.3 十字鏈表
7.2.4 鄰接多重表
7.3 圖的遍歷
7.3.1 深度優先搜索
7.3.2 廣度優先搜索
7.4 圖的連通性問題
7.4.1 無向圖的連通分量和生成樹
7.4.2 有向圖的強連通分量
7.4.3 最小生成樹
7.4.4 關節點和重連通分量
7.5 有向無環圖及其應用
7.5.1 拓撲排序
7.5.2 關鍵路徑
7.6 最短路徑
7.6.1 從某個源點到其餘各頂點的最短路徑
7.6.2 每一對頂點之間的最短路徑
第8章 動態存儲管理
8.1 概述
8.2 可利用空間表及分配方法
8.3 邊界標識法
8.3.1 可利用空間表的結構
8.3.2 分配演算法
8.3.3 回收演算法
8.4 夥伴系統
8.4.1 可利用空間表的結構
8.4.2 分配演算法
8.4.3 回收演算法
8.5 無用單元收集
8.6 存儲緊縮
第9章 查找
9.1 靜態查找表
9.1.1 順序表的查找
9.1.2 有序表的查找
9.1.3 靜態樹表的查找
9.1.4 索引順序表的查找
9.2 動態查找表
9.2.1 二叉排序樹和平衡二叉樹
9.2.2 B樹和B+樹
9.2.3 鍵樹
9.3 哈希表
9.3.1 什麼是哈希表
9.3.2 哈希函數的構造方法
9.3.3 處理沖突的方法
9.3.4 哈希表的查找及其分析
第10章 內部排序
10.1 概述
10.2 插入排序
10.2.1 直接插入排序
10.2.2 其他插入排序
10.2.3 希爾排序
10.3 快速排序
10.4 選擇排序
10.4.1 簡單選擇排序
10.4.2 樹形選擇排序
10.4.3 堆排序
10.5 歸並排序
10.6 基數排序
10.6.1 多關鍵字的排序
10.6.2 鏈式基數排序
10.7 各種內部排序方法的比較討論
第11章 外部排序
11.1 外存信息的存取
11.2 外部排序的方法
11.3 多路平衡歸並的實現
11.4 置換一選擇排序
11.5 最佳歸並樹
第12章 文件
12.1 有關文件的基本概念
12.2 順序文件
12.3 索引文件
12.4 ISAM文件和VSAM文件
12.4.1 ISAM文件
12.4.2 VSAM文件
12.5 直接存取文件(散列文件)
12.6 多關鍵字文件
12.6.1 多重表文件
12.6.2 倒排文件
附錄A 名詞索引
附錄B 函數索引
參考書目
⑵ 嚴蔚敏《數據結構》(C語言版|第二版)中,關於棧中的一個定義SElemType的定義在本書中哪個位置
selemtype肯定指的是棧元素類型,也就是說這只是一個類型說明符,指代的是可以是任意類型
⑶ 數據結構c語言版嚴蔚敏PPT-PPT誰有 急求
數據結構c語言版嚴蔚敏PPT-PPT在我的網路雲盤里, 要的話,趕緊去下載! 望你採納!
⑷ 《數據結構(C語言版)》pdf下載在線閱讀,求百度網盤雲資源
《數據結構(C語言版)》(嚴蔚敏)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:https://pan..com/s/1BmtD5k3mLtJZO36Xw_Hq3w
書名:數據結構(C語言版)
作者:嚴蔚敏
豆瓣評分:6.1
出版社:清華大學出版社
出版年份:2012-5
頁數:335
內容簡介:
《數據結構》(C語言版)是為「數據結構」課程編寫的教材,也可作為學習數據結構及其演算法的C程序設計的參數教材。
本書的前半部分從抽象數據類型的角度討論各種基本類型的數據結構及其應用;後半部分主要討論查找和排序的各種實現方法及其綜合分析比較。其內容和章節編排1992年4月出版的《數據結構》(第二版)基本一致,但在本書中更突出了抽象數據類型的概念。全書採用類C語言作為數據結構和演算法的描述語言。
本書概念表述嚴謹,邏輯推理嚴密,語言精煉,用詞達意,並有配套出版的《數據結構題集》(C語言版),便於教學,又便於自學。
本書後附有光碟。光碟內容可在DOS環境下運行的以類C語言描述的「數據結構演算法動態模擬輔助教學軟體,以及在Windows環境下運行的以類PASCAL或類C兩種語言描述的「數據結構演算法動態模擬輔助教學軟體」。
本書可作為計算機類專業或信息類相關專業的本科或專科教材,也可供從事計算機工程與應用工作的科技工作者參考。
作者簡介:
嚴蔚敏 清華大學計算機系教授,長期從事數據結構教學和教材建設,和吳偉民合作編著的《數據結構》曾獲「第二屆普通高等學校優秀教材全國特等獎」和「1996年度國家科學技術進步獎三等獎」。
吳偉民 廣東工業大學計算機學院副教授,碩士生導師。廣東省計算機學會圖像圖形分會秘書長。長期從事數據結構教學和系列教材建設。主要研究領域:數據結構和演算法、可是計算、編譯和虛擬機技術、智能系統等。和嚴蔚敏合作編著的《數據結構》曾獲「第二屆普通高等學校優秀教材全國特等獎」和「1996年度國家科學技術進步獎三等獎」。
⑸ 數據結構課程設計報告 樹的遍歷:文件目錄結構的顯示
數據結構課程設計報告
樹的遍歷:文件目錄結構顯示
專業 計算機科學與技術(軟體工程)
學生姓名 施利華
班級 M計算機101
學號 0751401208
指導教師 吳 素 芹
起止日期 2012.1.7-2012.1.14
目 錄
1 簡介 1
2演算法說明 2
3測試結果 3
4分析與探討 6
5小結 8
參考文獻 9
附錄 10
附錄1 源程序清單 10
樹的遍歷:文件目錄結構的顯示
1 簡介
1. 樹形結構
樹形結構是一類十分重要的非線性結構,它可以很好地描述客觀世界中廣泛存在的具有分支關系或層次特性的對象,如操作系統的文件構成、人工智慧搜索演算法的模型表示以及資料庫系統的信息組織形式等。
2.輸入要求:
輸入數據包含幾個測試案例。每一個案例由幾行組成,每一行都代表了目錄樹的層次結構。第一行代表了目錄的根節點。若是目錄節點,那麼它的孩子節點將在第二行中被列出,同時用一對圓括弧「()」界定。同樣,如果這些孩子節點中某一個也是目錄的話,那麼這個目錄所包含的內容將在隨後的一行中列出,由一對圓括弧將首尾界定。目錄的輸入格式為:*name size,文件的輸入格式為:name size,其中*代表當前節點是目錄,表示文件或目錄的名稱,由一串長度不大於10的字元組成,並且name字元串中不能含有『(』,『),』[『,』]『和』*『。size是該文件/目錄的大小,為一個大於0的整數。每一個案例中最多隻能包含10層,每一層最多有10個文件/目錄。
3.輸出要求:
對每一個測試案例,輸出時要求:第d層的文件/目錄名前需要插入8*d個空格,兄弟節點之間要在同一列上。不要使用Tab(製表符)來統一輸出的縮進。每一個目錄的大小(size)是它所包含的所有子目錄和文件大小以及它自身大小的總和。
4.輸入例子:
*/usr1
(*mark1*alex1)
(hw.c3*course1)(hw.c5)
(aa.txt12)
*/usr1
()
表示有兩個不同的根目錄,目錄名都是/usr,第一個根目錄/usr下包含mark和alex兩個子目錄,mark目錄下包含大小為3的文件hw.c和子目錄course,alex目錄下有一個大小為5的文件hw.c,子目錄course下包含文件aa.txt,其大小為12;第二個根目錄/usr下為空。
5.輸出例子:
|_*/usr[24]
|_*mark[17]
| |_hw.s[3]
| |_*course[13]
| |_aa.txt[12]
|_*alex[6]
|_hw.c[5]
|_*/usr[1]
2演算法說明
typedef struct TreeNode{
int data;
TreeNode *left;
TreeNode *right;
}TreeNode,*Tree;
先序:
void first(Tree *root)
{
printf("%d ",root->data);
first(root->left);
first(root->right);
}
中序:
void mid(Tree *root)
{
mid(root->left);
printf("%d ",root->data);
mid(root->right);
}
後序:
void last(Tree *root)
{
last(root->left);
last(root->right);
printf("%d ",root->data);
}
3測試結果
將代碼打入Microsoft Visual C++ 6.0軟體中,改完相關錯誤後運行代碼,開始不能出現正確的運行結果,在相關文件中新建文本文件,文件命名為」input.txt「。在文本文件中,打入輸入數據,得出下列截圖。
圖3-1 輸入數據
得出」input.txt」記事後,重新運行代碼,在相關文件夾的「output.txt」會出現相關的正確的輸出結果,此時得出下列兩張截圖。
圖3-2 輸出結果
圖3-3 輸出結果
輸入正確的代碼後運行程序,得出下列截圖。
圖3-4 運行結果
4分析與探討
目錄結構是一種典型的樹形結構,為了方便對目錄的查找,遍歷等操作,可以選擇孩子兄弟雙親鏈表來存儲數的結構。程序中要求對目錄的大小進行重新計算,根據用戶的輸入來建立相應的孩子兄弟雙親鏈表,最後輸入樹形結構。可以引入一個Tree類,將樹的構造,銷毀,目錄大小的重新計算(reSize),建立樹形鏈表結構(parse),樹形結構輸出(outPut)等一系列操作都封裝起來,同時對於每一個樹的借點,它的私有變數除了名稱(Name),大小(Size)和層數(Depth)之外,根據孩子兄弟雙親鏈表表示的需要,還要設置三個指針,即父指針(Tree*parent),下一個兄弟指針(Tree*NextSibling)和第一個孩子指針(Tree*Firstchild)。下面是幾個主要函數的實現。
1.建立樹形鏈表結構的函數parse()
根據輸入來確定樹形關系是,首先讀取根借點目錄/文件名和大小值,並根據這些信息建立一個新的節點;然後讀入後面的各行信息,對於同一括弧中的內容,即具有相同父節點的那些節點建立兄弟關聯。這個函數實際上是採用層數遍歷建立樹形鏈表結構。
定義一個Tree*類型的數組treeArray[ ],用來存放目錄的節點信息,並定義兩個整型變數head和rear,head值用來標記當前節點的父節點位置,每處理完一對括弧,head需要增加1,即下一對待處理括弧的父節點在treeArray[ ]中要往後移一個位置。如果當前處理的節點是目錄類型,則將它放在treeArray[ ]數組中,rear是treeArray[ ]的下標變數,加入一個樹的節點,並和head所指的父節點建立關聯,但是不用放入treeArray[ ]中。
2.目錄大小重新計算函數reSize()
輸入數據中對目錄大小的初始化值一般為1,而目錄的真正大小應該是自身的大小和它包含的所有文件及子目錄的大小之和。因此,在計算目錄大小的時候,需要遍歷它下面所有的文件和子目錄,可以採用遞歸嵌套的後序遍歷方式。另外要注意,採用孩子兄弟雙親鏈表表示時,父目錄下的所有子目錄和子文件都在該父目錄的左子樹上(右字數第一個節點是該目錄的兄弟節點),所以遍歷的時候只需要遍歷目錄的左字數即可。
3.輸出樹形結構的函數outPut()
輸出是一個線序遍歷的過程。為完成對樹形的輸出,兄弟目錄之前需要相同的縮進,用』|』上下相連,而斧子目錄或父目錄和子文件之間需要設定正確的縮進,子目錄或子文件要比父目錄向右縮進8個空格。設置一個標志數組flag[11](每個目錄下最大層次數為10),當前Tree*temp指針所指的節點如果有兄弟節點,則置flag數組值為1,否則置為0;並由此節點反復查詢它的祖先節點的情況,知道根節點位置。輸出時,遇到flag[ ]=1時,屏幕輸出「| 」,表明是兄弟節點;遇到flag[ ]=0時則輸出「 」,這樣就可以保證兄弟節點之間有相同的縮進,而子節點總比父節點享有縮進8個空格。
treeArray[]
4.消除輸入總多餘空格的函數skipwhiteSpace(string&s,int*i)
從用戶輸入數據中讀入一行後,調用該函數來跳過s字元串中s[i]之後的空格,以方便後面的處理。
此外,關於讀入目錄名稱,大小,以及將string類型的Size值轉換成int類型的函數的實現,相對比較簡單,此外不再贅述。
圖4-1 數據異常測試案例
5小結
參考文獻
[1] 劉振安,劉燕君.C程序設計課程設計[M].[北京]機械工業出版社,2004年9月
[2] 譚浩強.C程序設計(第三版).清華大學出版社,2005年7月
[3] 嚴蔚敏,吳偉民.數據結構(C語言版).清華大學出版社,1997年4月
[4]吳文虎.程序設計基礎.清華大學出版社,2003年
[5]王立柱.C/C++與數據結構.清華大學出版社,2002年
[6]顧元剛.數據結構簡明教程.東南大學出版社,2003年
[7]郭福順,王曉芬,李蓮治.數據結構(修訂本).大連理工大學出版社,1997年
[8]嚴蔚敏,陳文博.數據結構及應用演算法教程.清華大學出版社,2004年
附錄
附錄1 源程序清單
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
string s = "";
int startPos = 0;
ofstream outfile;
ifstream infile;
/**構造Tree類**/
class Tree{
string Name; /* 樹的根結點名稱 */
int Size; /* 樹的大小,用於統計這棵樹本身及其包含的所以子樹大小的總和*/
Tree* FirstChild; /* 指向它的第一個孩子結點 */
Tree* NextSibling; /* 指向它的下一個兄弟結點 */
Tree* parent; /* 指向雙親結點 */
public:
Tree(string Name = "", int Size = 0);/* 構造函數 */
void parse(); /* 根據輸入數據來建立樹形結構 */
void reSize(); /* 重新統計樹結點的大小 */
void outPut(); /* 輸出樹形結構 */
~Tree(); /* 析構函數 */
};
/*** 樹結點數組treeArray[],以及用來標注雙親結點位置的head和目錄結點的rear***/
Tree* treeArray[100];
int head = 0, rear = 0;
/*** 建立只有一個結點的樹,其三個指針域均為空 ***/
Tree::Tree(string Name, int Size){
this->Name = Name;
this->Size = Size;
FirstChild = NULL;
NextSibling = NULL;
parent = NULL;
}
/*** 析構函數,刪除同一根結點下的各個子結點,釋放空間 ***/
Tree::~Tree()
{
Tree* temp;
Tree* temp1;
temp = FirstChild;
while(temp != NULL)
{
temp1 = temp;
temp = temp->NextSibling;
delete temp1;
}
}
/* 先序遍歷根結點下的所有結點,將每一個結點的Size值都加到根結點的Size中去**/
void Tree::reSize()
{
Tree* temp = this;
/*** 如果當前的結點沒有孩子結點,則它的Size值不變,即為輸入時候的值 ***/
if(temp->FirstChild != 0){
temp = temp->FirstChild;
while(temp != 0){
temp->reSize();
Size += temp->Size;
temp = temp->NextSibling;
}
}
}
/***檢查Name中有無非法字元**************/
bool checkName(string s)
{
if(s[0]!='*' && s.length() > 10)
return false;
if(s[0]=='*' && s.length() > 11)
return false;
if(s[0]!='*' && (s[0]=='(' || s[0]==')' || s[0]=='[' || s[0]==']'))
return false;
for(int i=1;i<s.length();i++){
if(s[i]=='*' || s[i]=='(' || s[i]==')' || s[i]=='[' || s[i]==']')
return false;
}
return true;
}
/*** 按照先序遍歷的方式有縮進地來輸出樹形結構 ***/
void Tree::outPut()
{
Tree* temp; /*用來指向當前結點的祖先結點*/
Tree* temp1;
bool flag[11];/*用來標志輸出縮進、層次情況的數組*/
int i;
outfile.open("output.txt",ios::app);
if(!outfile){
cout<<"cannot append the output file.\n";
exit(0);
}
if(!checkName(Name)){
cout<<"input error!--"<<Name<<endl;
exit(0);
}
outfile<<"|_"<<Name<<"["<<Size<<"]\n";
outfile.close();
/* 輸出當前的結點信息 */
temp1= FirstChild;/* 用來指向當前結點的子結點 */
while(temp1 != NULL)
{
outfile.open("output.txt",ios::app);
if(!outfile){
cout<<"cannot append the output file.\n";
exit(0);
}
i = 0;
temp = temp1;
while(temp->parent != NULL)
{
/*當前temp指針所指的結點如果有兄弟結點,則置flag數組值為1,否則置為0;並由此結點反復查詢它的祖先結點的情況,直到根結點為止*/
if(i>=10){
//檢查當前的父目錄包含的子文件(或目錄數)是否大於10;
cout<<"input error!--dictionary contains more than 10 levels."<<endl;
exit(0);
}
temp = temp->parent;
if(temp->NextSibling != NULL)
flag[i++] = true;
else
flag[i++] = false;
}
/*兄弟結點之間有相同的縮進,子結點比父結點向右縮進8個空格*/
while(i--)
{
if(flag[i] == true)
outfile<<"| ";
else
outfile<<" ";
}
outfile.close();
temp1->outPut();
temp1 = temp1->NextSibling;
}
}
/*** 跳過字元串s中,第(*i)個之後多餘的空格 ***/
void skipWhiteSpace(string& s, int* i)
{
while(s[*i] == '\t' || s[*i] == ' ')
(*i)++;
}
/*** 獲取輸入行中一對'()'之間的字元串,即為同一雙親結點下的子結點 ***/
string getSubDir(string& line, int* startPos)
{
string res = "";
skipWhiteSpace(line,startPos);
while(line[*startPos] != ')')
res += line[(*startPos)++];
res += line[(*startPos)++];
skipWhiteSpace(line, startPos);
return res;
}
/*** 由於用戶輸入時候目錄的大小Size值為String類型,因此需要將它轉變成integer類型***/
int stringToNum(string s)
{
int num = 0;
unsigned int i = 0;
while(i < s.length())
{
num *= 10;
num += s[i++] - '0';
}
return num;
}
/*** 提取目錄/文件的名稱 ***/
string getName(string& s, int* i)
{
string name = "";
while(s[*i] != ' ' && s[*i] != '\t')
name += s[(*i)++];
return name;
}
/*** 提取目錄/文件的大小,然後將string類型轉換成integer類型 ***/
int getSize(string&s, int* i)
{
string size = "";
while((unsigned int)(*i) < s.length() && s[*i] != ' ' && s[*i] != '\t' && s [*i] != ')')
size += s[(*i)++];
return stringToNum(size);
}
/*** 根據用戶的輸入字元串來構建樹的結構 ***/
void Tree::parse()
{
Tree* temp;
string line;
string name;
int size;
/***head值用來標記當前結點的雙親結點位置;如果當前處理的結點是目錄類型,則將它放在treeArray[]數組中,下標用rear來記錄;如果是文件類型的目錄,只需要按照name和size建立一個樹的結點,但是不用放入treeArray[]中 ***/
while(getline(infile,line,'\n'))
{
startPos = 0;
while(1)
{
s = getSubDir(line, &startPos);
int i = 1;
skipWhiteSpace(s, &i);
if(s[i] != ')')
{
skipWhiteSpace(s,&i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
temp = treeArray[head%100]->FirstChild = new Tree(name,size);
temp->parent = treeArray[head%100];
if(name[0] == '*')
treeArray[(rear++)%100] = temp;
skipWhiteSpace(s,&i);
}
while(s[i] != ')')
{
skipWhiteSpace(s,&i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
temp->NextSibling = new Tree(name,size);
skipWhiteSpace(s,&i);
temp = temp->NextSibling;
temp->parent = treeArray[head%100];
if(name[0] == '*')
treeArray[(rear++)%100] = temp;
}
head ++;
/***測試是否一行掃描完畢***/
if((unsigned int)startPos >= line.length())
break;
}
/***只有一個根結點的情況***/
if(head == rear)
break;
}
}
///////////////////////////////////////////////////////////
//**** 主測試文件main.cpp******/////
//////////////////////////////////////////////////////////
int main()
{
Tree* fileTree;
string s;
string name;
int size;
outfile.open("output.txt");
if(!outfile){
cout<<"cannot open the output file!\n";
exit(0);
}
outfile<<"The result is as follows:\n";
outfile.close();
infile.open("input.txt",ios::out);
if(!infile){
cout<<"cannot open the input file!\n";
exit(0);
}
while(getline(infile,s,'\n'))
{
int i = 0;
skipWhiteSpace(s, &i);
name = getName(s,&i);
skipWhiteSpace(s,&i);
size = getSize(s,&i);
fileTree = new Tree(name, size);
if(name[0] == '*')
{
treeArray[rear++] = fileTree;
fileTree->parse();
}
fileTree->reSize();
fileTree->outPut();
delete fileTree;
}
infile.close();
return 0;
}
⑹ 數據結構
具有特定關系的數據元素的集合稱為數據結構:例如線性表
⑺ 數據結構(C語言)
個人感覺在初始化的時候沒必要用linkqueue * &Q,直接用linkqueue * Q就可以了,至於為什麼我給你解釋下C語言中按值傳遞你應該就明白了。在C語言中函數調用的時候印象中都是按值傳遞,形參和實參是兩個不同的變數,只不過因為在調用時將實參的值賦值給了形參,所以他們看起來相同,因為是不同的變數所以不管你對形參怎麼改變實參都不會變。 那要怎麼實現子函數修改實參的功能呢?C語言的方法是用指針,C++的方法除了指針外還有引用,&x就是聲明了一個引用,以前的C語言是沒有引用的(至少我看的教材沒有),但是好像新的標准里邊有了引用,這方面的知識樓主可以自己去查下。 舉個例子說明引用吧。
有如下兩個函數:
void test1(int &x)和void test2(int x)
現在我在主函數中分別調用這兩個函數:
int y=10;
test2(y);
test1(y);
調用test2的時候,形參x分配得到內存空間,其值為y的值,相當於執行了操作
x=y
之後對x的任何操作都不會影響實參y。
而對test1的調用就不同了,形參x和實參y就是同一個變數,並沒有新的變數。之後對x的操作就是對實參y的操作。
引用其實就是別名,int &x=y的含義就是變數y有個別名x,二者是一樣的。
所以我感覺初始化的時候一般沒必要既用指針又用引用(不過這也得看初始化是怎麼操作的),但是用了也沒什麼錯。 想要解釋清楚引用的話感覺還是得從匯編講。。。。樓主對什麼地方不明白的話再問我吧
⑻ 《數據結構精講與習題詳解》pdf下載在線閱讀全文,求百度網盤雲資源
《數據結構精講與習題詳解》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1dHBN4Zlo0s-Sv3wB70qt9w
簡介:本書是清華大學出版社出版的《數據結構(C語言版)》(第2版)的配套教材,對「數據結構」課程常用習題進行了解析,對許多不易通過自學理解的概念和知識做了深入講解,並針對「數據結構」課程的學習給出了指導性建議
⑼ 數據結構的問題 求步驟和思路
二叉樹的前序序列是樹根在前面,中序序列裡面樹根在中間。
邏輯是重復的按照,先通過前序確定樹根,再通過中序確定左右子樹。
前序ABDGCEF中DGBAECF。可以看出樹根是,A。
推出左樹的前序BDG中序DGB;右樹的前序是CEF中序是ECF;
接著分別找出左樹的樹根和左右子樹,右樹的樹根和左右子樹。
如下遞歸處理,既可以搞定。
訣竅就是『先通過前序確定樹根,再通過中序確定左右子樹』