-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
21世紀高等學校計算機專業核心課程規劃教材數據結構(C語言版)(第3版)/唐國民 版權信息
- ISBN:9787302501824
- 條形碼:9787302501824 ; 978-7-302-50182-4
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>
21世紀高等學校計算機專業核心課程規劃教材數據結構(C語言版)(第3版)/唐國民 本書特色
本書的特色是深入淺出,注重基本理論、基本知識和基本技能,每一章的開頭都配有本章要點和本章學習目標,且思想性、科學性、啟發性貫穿于所有章節。它的教學要求是:讓學生學會分析和研究計算機加工的數據結構的特性,為應用的數據選擇恰當的邏輯結構、存儲結構及相應的算法,并初步掌握算法的時間分析和空間分析技術,在學習中訓練程序設計的能力。內容中配有大量的例題和詳盡的注釋,末尾處都配有本章小結,并配置了大量的不同類型的習題。書中自始至終使用C語言來描述算法和數據結構,各章的程序都在C-Free 4.0或Visual C++ 6.0中調試通過,以方便讀者在計算機上進行實踐,有助于理解算法的實質和基本思想。
21世紀高等學校計算機專業核心課程規劃教材數據結構(C語言版)(第3版)/唐國民 內容簡介
本書是為“數據結構”課程編寫的教材,也可以作為學習數據結構及其算法的C語言程序設計的參考書。 書中系統介紹各種常用的數據結構及它們的存儲表示,討論了基于這些數據結構的基本操作和實際的執行算法,并闡述了各種常用數據結構內涵的邏輯關系。全書共分為9章。章為概論,引入數據結構與算法的一些基本概念,是全書的綜述; 第2~7章分別介紹線性表、棧、隊列、串、多維數組、廣義表、樹、二叉樹和圖等幾種基本的數據結構; 第8章和第9章分別介紹查找和排序,它們都是數據處理時廣泛使用的技術。書中既體現了抽象數據類型的觀點,又對每個算法的具體實現給出了完整的C語言源代碼描述。 本書的特色是深入淺出,既注重理論又重視實踐,使用算法設計實例的教學方式來組織內容,重點明確、結構合理。全書配有大量的例題和詳盡的注釋,各章都有小結和不同類型的習題。書中自始至終使用C語言來描述算法和數據結構,全部程序都在CFree 3.5或Visual C++ 6.0中調試通過。 本書可作為普通高等學校計算機及相關專業本科生的教材,也可作為專科和成.人教育的教材,還可供從事計算機應用的科技人員參考。與本書配套的《數據結構實驗教程(C語言版)》也將由清華大學出版社出版。
21世紀高等學校計算機專業核心課程規劃教材數據結構(C語言版)(第3版)/唐國民 目錄
目錄
第1章概論
1.1什么是數據結構
1.1.1數據和數據元素
1.1.2數據類型與數據對象
1.1.3數據結構
1.2為什么要學習數據結構
1.2.1學習數據結構的重要性
1.2.2數據結構的應用舉例
1.3算法和算法分析
1.3.1算法的概念
1.3.2算法的描述和設計
1.3.3算法分析
本章小結
習題1
第2章線性表
2.1線性表的基本概念
2.1.1線性表的定義
2.1.2線性表的基本操作
2.2線性表的順序存儲
2.2.1順序表
2.2.2順序表的基本操作
2.2.3一個完整的例子(1)
2.3線性表的鏈式存儲
2.3.1單鏈表的基本概念
2.3.2單鏈表的基本操作
2.3.3一個完整的例子(2)
2.3.4循環鏈表
2.3.5雙向鏈表
2.3.6雙向循環鏈表
2.3.7靜態鏈表
2.4線性表順序存儲與鏈式存儲的比較
2.5線性表的應用
2.5.1約瑟夫問題
2.5.2多項式加法
2.5.3電文加密
本章小結
習題2
第3章棧和隊列
3.1棧
3.1.1棧的定義與基本操作
3.1.2順序棧的存儲結構和操作的實現
3.1.3鏈棧的存儲結構和操作的實現
3.2棧的應用
3.2.1數制轉換
3.2.2括號匹配問題
3.2.3子程序的調用
3.2.4利用一個順序棧逆置一個帶頭結點的單鏈表
3.3隊列
3.3.1隊列的定義與基本操作
3.3.2鏈隊列的存儲結構和操作的實現
3.3.3順序隊列的存儲結構和操作的實現
3.4隊列的應用
3.4.1打印楊輝三角形
3.4.2迷宮問題: 尋找一條從迷宮入口到出口的*短路徑
3.5遞歸
3.5.1遞歸的定義與實現
3.5.2遞歸消除
本章小結
習題3
第4章串
4.1串的定義和基本操作
4.1.1串的定義
4.1.2串的基本操作
4.2串的表示和實現
4.2.1串的定長順序存儲
4.2.2串的堆存儲結構
4.2.3串的塊鏈存儲結構
4.3串的模式匹配算法
4.3.1基本的模式匹配算法
4.3.2模式匹配的改進算法——KMP算法
本章小結
習題4
第5章多維數組和廣義表
5.1多維數組
5.1.1多維數組的定義
5.1.2數組的存儲結構
5.2矩陣的壓縮存儲
5.2.1特殊矩陣
5.2.2稀疏矩陣
5.3廣義表
本章小結
21世紀高等學校計算機專業核心課程規劃教材數據結構(C語言版)(第3版)/唐國民 節選
第3章 棧 和 隊 列 本章要點 棧 棧的應用舉例 隊列 隊列的應用舉例 本章學習目標 理解棧的定義及其基本運算 掌握順序棧和鏈棧的各種操作實現 理解隊列的定義及其基本運算 掌握循環隊列和鏈隊列的各種操作實現 學會利用棧和隊列解決一些問題 3.1棧 棧和隊列是在程序設計中廣泛使用的兩種重要的數據結構。由于從數據結構角度看,棧和隊列是操作受限的線性表,因此,也可以將它們稱為限定性的線性表結構。 3.1.1棧的定義與基本操作 在日常生活中,我們會發現有許多這樣的趣事。例如,把許多書籍依次放進一個大小相當的箱子中,當我們在取書時,就得先把后放進里面的書取走,才能拿到先放入的被壓在*底層的書; 又如一疊洗凈的盤子,洗的時候總是將盤子逐個疊放在已洗好的盤子上面,而用的時候則是從上往下逐個取用,即后洗好的盤子比先洗好的盤子先被使用。這種后進先出的結構稱為棧。 1. 棧的定義 棧(stack)是一種僅允許在一端進行插入和刪除運算的線性表。棧中允許進行插入和刪除的那一端,稱為棧頂(top)。棧頂的第1個元素稱為棧頂元素。棧中不可以進行插入和刪除的那一端(線性表的表頭),稱為棧底(bottom)。在一個棧中插入新元素,即把新元素放到當前棧頂元素的上面,使其成為新的棧頂元素,這一操作稱為進棧、入棧或壓棧(push)。從一個棧中刪除一個元素,即把棧頂元素刪除掉,使其下面的元素成為新的棧頂元素,稱為出棧或退棧(pop)。例如,在棧S=(a1,a2,…,an)中,a1稱為棧底元素,an稱為棧頂元素。進棧順序為a1,a2,…,an,如圖3.1(a)所示,而出棧順序為an,an-1,…,a2,a1。 注意: 由于棧的插入和刪除操作只能在棧頂一端進行,后進棧的元素必定先出棧,所以棧又稱為后進先出(Last In First Out)的線性表(簡稱為LIFO結構)。它的這個特點可用圖3.1(b)所示的鐵路調度站形象地表示。 圖3.1棧的圖示 思考: ① 棧是什么?它與一般線性表有何不同? ② 一個棧的輸入序列是12345,若在入棧的過程中允許出棧,則棧的輸出序列43512有可能實現嗎?12345的輸出呢? 討論: 有無通用的判別原則? 有!若輸入序列是…,Pj,…,Pk,…,Pi,…(Pj 2. 棧的基本操作 定義在棧上的基本操作有: (1) InitStack(S): 構造一個空棧S。 (2) ClearStack(S): 清除棧S中的所有元素。 (3) StackEmpty(S): 判斷棧S是否為空,若為空,則返回true; 否則返回false。 (4) GetTop(S): 返回S的棧頂元素,但不移動棧頂指針。 (5) Push(S, x): 插入元素x作為新的棧頂元素(入棧操作)。 (6) Pop(S): 刪除S的棧頂元素并返回其值(出棧操作)。 由于棧是運算受限的線性表,因此線性表的存儲結構對棧也同樣適用。與線性表相似,棧也有兩種存儲表示方法,即順序存儲和鏈式存儲兩種結構。順序存儲的棧稱為順序棧,鏈式存儲的棧稱為鏈棧。 3.1.2順序棧的存儲結構和操作的實現 1. 順序棧存儲結構的定義 順序棧利用一組地址連續的存儲單元依次存放從棧底到棧頂的數據元素。在C語言中,可以用一維數組描述順序棧中數據元素的存儲區域,并預設一個數組的*大空間。棧底設置在0下標端,棧頂隨著插入和刪除元素而變化,即入棧的動作使地址向上增長(稱為“向上增長”的棧),可用一個整型變量top來指示棧頂的位置。為此,順序棧存儲結構的描述如下: #define Maxsize 100/*設順序棧的*大長度為100,可依實現情況而修改*/ typedef int datatype; typedef struct { datatype stack[Maxsize]; int top; /*棧頂指針*/ }SeqStack; /*順序棧類型定義*/ SeqStack *S; /*S為順序棧類型變量的指針*/ 由于C語言中數組下標是從0開始的,即S>stack[0]是棧底元素,而棧頂指針S>top是正向增長的,即進棧時棧頂指針S>top加1,然后把新元素放在top所指的空單元內,退棧時S>top減1,因此S>top等于-1(或S>top小于0)表示棧空,S>top等于maxsize-1表示棧滿。由此可知,對順序棧進行插入和刪除運算相當于是在順序表的表尾進行的,其時間復雜度為O(1)。一個棧的幾種狀態以及在這些狀態下棧頂指針top和棧中元素之間的關系如圖3.2所示。 圖3.2棧頂指針和棧中元素之間的關系 通過分析,我們可以得出以下結論: (1) 若top=-1,則表示棧空。 如果使棧頂指針top指向待入棧元素的位置,則入棧、出棧時,top應該如何變化?棧空、棧滿的條件又是什么? (2) 若top=maxsize-1,則表示棧滿。 如果使棧頂指針top指向待入棧元素的位置,則入棧、出棧時,top應該如何變化?棧空、棧滿的條件又是什么? 2. 順序棧的基本操作 由于順序棧的插入和刪除只在棧頂進行,因此順序棧的基本操作比順序表簡單得多。值得一提的是: 在做入棧操作前,首先要判定棧是否滿; 在做出棧操作前,又得先判定棧是否空。 1) 構造一個空棧 SeqStack *InitStack() { SeqStack *S; S=(SeqStack *)malloc(sizeof(SeqStack)); if(!S) {printf("空間不足"); return NULL;} else {S->top=-1; return S;} } 2) 取棧頂元素 datatype GetTop(SeqStack *S) {if (S->top==-1) {printf("\n棧是空的!"); return FALSE;} else return S->stack[S->top]; } 3) 入棧 SeqStack *Push(SeqStack *S,datatype x) {if(S->top==Maxsize-1) {printf("\n棧是滿的!"); return NULL; } else { S->top++; S->stack[S->top]=x; return s;} } 4) 出棧 datatype Pop( SeqStack *S) {if(S->top==-1) {printf("\nThe sequence stack is empty!"); return FALSE;} S->top--; return S->stack[S->top+1]; } 5) 判別空棧 intStackEmpty(SeqStack*S) {if(S->top==-1) return TRUE; else return FALSE; } 例3.1若增加main函數以及display函數,則可以調試上述各種棧的基本操作算法。 #define Maxsize 50 typedef int datatype; typedef struct {datatype stack[Maxsize]; int top; }SeqStack; void display(SeqStack *S) {int t; t=S->top; if(S->top==-1) printf("the stack is empty!\n"); else while(t!=-1)
- >
詩經-先民的歌唱
- >
回憶愛瑪儂
- >
名家帶你讀魯迅:故事新編
- >
月亮與六便士
- >
自卑與超越
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
唐代進士錄
- >
我從未如此眷戀人間