導航:首頁 > 源碼編譯 > 數據結構及應用演算法教程修訂版

數據結構及應用演算法教程修訂版

發布時間:2023-01-18 00:23:05

1. 考四川省計算機二級(VB語言)用什麼書書名!

需要2本書
一本是《全國計算機等級考試二級教程---Visual Basic 語言程序設計》 高等教育出版社
另一本是《數據結構及應用演算法教程》 嚴蔚敏 陳文博 編著
清華大學出版社
還有一點,還需要下載一個「vb6.0」,在網上搜搜,可以找找到。這是編程使用的工具。

2. 數據結構課程設計報告 樹的遍歷:文件目錄結構的顯示

數據結構課程設計報告

樹的遍歷:文件目錄結構顯示

專業 計算機科學與技術(軟體工程)
學生姓名 施利華
班級 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;
}

3. 《數據結構與演算法分析( C++版)(第二版)國外計算機科學教材系列》txt下載閱讀,求百度雲資源

《數據結構與演算法分析(C++版)(第二版)》([美] Clifford A.Shaffer)電子書網盤下載免費在線閱讀

鏈接: https://pan..com/s/1DBcf3gNP9u5VdIJWPS5n6w

pdf" data_size="38.77M" data_filelogo="https://gss0.bdstatic.com//yun-file-logo/file-logo-6.png" data_number="1" data_sharelink="https://pan..com/s/1DBcf3gNP9u5VdIJWPS5n6w" data_code="9e1k">

提取碼: 9e1k

書名:數據結構與演算法分析(C++版)(第二版)

作者:[美] Clifford A.Shaffer

譯者:張銘

豆瓣評分:7.1

出版社:電子工業出版社

出版年份:2002-6

頁數:327

內容簡介:

本書採用程序員最愛用的面向對象C+ +語言來描述數據結構和演算法,並把數據結構原理和演算法分析技術有機地結合在一起,系統介紹了各種類型的數據結構和排序、檢索的各種方法。作者非常注意對每一種數據結構不同存儲方法及有關演算法進行分析比較。書中還引入了一些比較高級的數據結構與先進的演算法分析技術,並介紹了可計算性理論的一般知識。本版的重要改進在於引入了參數化的模板,從而提高了演算法中數據類型的通用性,支持高效的代碼重用。本書概念清楚、邏輯性強、內容新穎,可作為大專院校計算機軟體專業與計算機應用專業學生的教材和參考書,也可供計算機工程技術人員參考。

作者簡介:

Associate Professor

2000A Torgerson

Department of Computer Science

Virginia Tech

Blacksburg, VA 24061

4. 急急急!幫我介紹幾本初級廣播類的書籍,帶上書名,謝謝。

313中國播音學基礎①《播音發聲學》②《播音創作基礎》徐恆張頌北京廣播學院北京廣播學院314語言學理論①《語言學綱要》②《語言學概論》③《語言學基礎理論》(修訂版)葉蜚聲、徐通鏘高明凱岑運強北京大學中華書局北京師范大學315演算法與數據結構①《數據結構及應用演算法教程》(C語言版)嚴蔚敏清華大學403綜合考試[語言1]①《語言學綱要》②《語音學教程》③《新聞理論》葉蜚聲、徐通鏘林燾、王理嘉雷躍捷北京大學北京大學北京廣播學院404綜合考試[語言2]①《現代漢語》(修訂本)②《現代漢語》(增訂三版)③《古代漢語》④《語音學教程》胡裕樹黃伯榮、廖序東王寧林燾、王理嘉上海教育高教北京北京大學405綜合考試[語言3]①《語言學綱要》②《現代漢語》(增訂三版)③《計算機操作系統》葉蜚聲、徐通鏘黃伯榮、廖序東湯子瀛北京大學高教西安電子科大503播音主持理論與實踐①《中國播音學》②《播音語言通論》③《語言傳播文論》張頌張頌張頌北京廣播學院北京廣播學院北京廣播學院504應用語言學 ①《應用語言學概論》 於根元 商務印書館505軟體工程和資料庫原理①《實用軟體工程》(第二版)②《資料庫系統概論》(第三版)鄭人傑薩師煊清華大學高等教育312語言基礎①《古代漢語》②《現代漢語》③《基礎語言學教程》王力胡裕樹徐通鏘中華書局上海教育北京大學402文學基礎 ①《中國文學史》②《文學理論教程》(修訂本)③《現代文學三十年》 ④《外國文學史》袁行霈主編童慶炳主編溫儒敏、錢理群等著 鄭克魯 高等教育高等教育北京大學 高等教育 506漢語言文字學①《現代漢語》②《現代漢語》③《漢語史稿》④《語言學綱要》⑤《語言學基礎理論》⑥《文字學概要》胡裕樹黃伯榮、廖序東王力葉蜚聲 徐通鏘岑運強裘錫圭上海教育高等教育中華書局北京大學北京師范大學商務印書館 看看吧,也許有用~以前去考廣播播音的時候老師開的書目~

5. 數據結構及應用演算法教程習題

去網路上搜啊 全都有的 網路文庫里

6. 求推薦數據結構與演算法的教程

b站郝斌的可以,但是不全,然後青島大學王卓的過程比較細,我建議在先理解原理的基礎上,自己參考相關書籍手打,一定要自己實現演算法,注意自己實現不是抄代碼。另外看到比較復雜的演算法,你可以手動實現前面的步驟,然後手動實現每個步驟時,你可以與代碼對應,這樣很容易理解。

7. 數據結構教程第六版李春葆與第五版的區別

數據結構教程第六版和第五版在內容上有一些區別。
第六版在內容上比第五版增加了一些新的章節,如「二叉排序樹」、「線段樹」和「圖的遍歷」等。這些章節對數據結構的理解和應用都有重要意義。
第六版還對第五版的一些章節進行了修改和補充,如「查找」、「排序」和「棧與隊列」等。這些修改和補充使得第六版的內容更加豐富、系統,能夠更好地滿足讀者的需求。
另外,第六版還引入了一些新的教學方法和教學工具,如案例分析、演算法動畫和課堂演練等。

8. 請問考研863數據結構與程序設計,都考什麼東西有指定教材嗎

數據的邏輯結構、存儲結構以及各種基本操作的實現等;嚴蔚敏,《數據結構及應用演算法教程》。

考試目標是要求考生掌握C語言程序設計的基本概念、各種數據類型及基本程序設計方法,掌握各種數據結構的特點、存儲表示、運算方法以及在計算機科學中最基本的應用,並具備選用合適的數據結構,利用C語言編寫質量高、風格好的應用程序的能力。

合格考生應當達到全國普通高等院校計算機專業優秀本科畢業生的水平,具有較好的計算機理論基礎。主要參考教材有:《數據結構及應用演算法教程》(修訂版)嚴蔚敏、陳文博清華大學出版社2011-5-9 ;《C語言程序設計教程(第二版)》王敬華清華大學出版社2009-8。

(8)數據結構及應用演算法教程修訂版擴展閱讀:

考研要求規定:

1、中華人民共和國公民;擁護中國共產黨的領導,品德良好,遵紀守法;身體健康狀況符合國家和招生單位規定的體檢要求。

2、國家承認學歷的應屆本科畢業生(含普通高校、成人高校、普通高校舉辦的成人高等學歷教育應屆本科畢業生)及自學考試和網路教育屆時可畢業本科生,錄取當年9月1日前須取得國家承認的本科畢業證書)。

3、獲得國家承認的高職高專畢業學歷後滿2年(從畢業後到錄取當年9月1日,下同)或2年以上,達到與大學本科畢業生同等學歷,且符合招生單位根據本單位的培養目標對考生提出的具體業務要求的人員。

閱讀全文

與數據結構及應用演算法教程修訂版相關的資料

熱點內容
古玩哪個app好賣 瀏覽:146
u盤內容全部顯示為壓縮包 瀏覽:517
編譯固件時使用00優化 瀏覽:356
速借白條app怎麼樣 瀏覽:756
用紙張做的解壓東西教程 瀏覽:12
求圓的周長最快演算法 瀏覽:190
安卓熱點怎麼減少流量 瀏覽:270
北京代交社保用什麼app 瀏覽:855
第一眼解壓視頻 瀏覽:726
文件夾err是什麼 瀏覽:97
qt4編程pdf 瀏覽:572
區域網伺服器下如何連續看照片 瀏覽:254
經過加密的數字摘要 瀏覽:646
加密鎖9000變列印機 瀏覽:694
程序員的職業發展前途 瀏覽:639
安卓是世界上多少個程序員開發 瀏覽:45
解壓器官方免費 瀏覽:85
單片機p10開發 瀏覽:487
做什麼app賺錢 瀏覽:85
博途編譯失敗聯系客戶支持部門 瀏覽:929