數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 2_第1頁(yè)
數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 2_第2頁(yè)
數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 2_第3頁(yè)
數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 2_第4頁(yè)
數(shù)據(jù)基礎(chǔ)結(jié)構(gòu) 2_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

教案紙(首頁(yè))第1頁(yè)第次課學(xué)時(shí)授課時(shí)間___________教學(xué)主題數(shù)組的基本概念,數(shù)組的存儲(chǔ)結(jié)構(gòu)教學(xué)要求1、掌握數(shù)組的邏輯結(jié)構(gòu)特性,數(shù)組抽象數(shù)據(jù)類型的描述方法。2、掌握數(shù)組的順序存儲(chǔ)結(jié)構(gòu)及其特點(diǎn)。3、掌握對(duì)稱矩陣、上三角矩陣、下三角矩陣和三對(duì)角矩陣的壓縮存儲(chǔ)。4、掌握棧在實(shí)際求解問(wèn)題中的應(yīng)用方法。教學(xué)重點(diǎn)數(shù)組的順序存儲(chǔ)結(jié)構(gòu)及其特點(diǎn);對(duì)稱矩陣、上三角矩陣、下三角矩陣和三對(duì)角矩陣的壓縮存儲(chǔ)方法。教學(xué)難點(diǎn)數(shù)組的順序存儲(chǔ)結(jié)構(gòu)及其特點(diǎn);對(duì)稱矩陣、上三角矩陣、下三角矩陣和三對(duì)角矩陣的壓縮存儲(chǔ)方法。。教學(xué)方法講授+練習(xí)教學(xué)手段多媒體、上機(jī)實(shí)操講授要點(diǎn)1、數(shù)組的邏輯結(jié)構(gòu)特性。2、數(shù)組的順序存儲(chǔ)結(jié)構(gòu)及其特點(diǎn)。3、對(duì)稱矩陣、上三角矩陣、下三角矩陣和三對(duì)角矩陣的壓縮存儲(chǔ)。作業(yè)參考資料教材:數(shù)據(jù)結(jié)構(gòu)教程(第5版),清華大學(xué)出版社,李春葆等2017。參考資料:數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言),清華大學(xué)出版社,嚴(yán)蔚敏吳偉民編著。注:本頁(yè)為每次課教案首頁(yè)教案紙(續(xù)頁(yè))第3頁(yè)教學(xué)內(nèi)容備注與后記5.1數(shù)組1、數(shù)組的定義數(shù)組是所有高級(jí)編程語(yǔ)言中都已實(shí)現(xiàn)的固有數(shù)據(jù)類型,因此凡學(xué)習(xí)過(guò)高級(jí)程序設(shè)計(jì)語(yǔ)言的讀者對(duì)數(shù)組都不陌生。但它和其它諸如整數(shù)、實(shí)數(shù)等原子類型不同,它是一種結(jié)構(gòu)類型。換句話說(shuō),"數(shù)組"是一種數(shù)據(jù)結(jié)構(gòu)。數(shù)組的類型定義

ADTArray{

數(shù)據(jù)對(duì)象:D={aj1,j2,...,ji,...jN|=ji0,...,bi-1,i=1,2,..,N,

稱N(>0)為數(shù)組的維數(shù),bi為數(shù)組第i維的長(zhǎng)度,

ji為數(shù)組元素的第i維下標(biāo),aj1,...,jN∈ElemSet}

數(shù)據(jù)關(guān)系:R={R1,R2,...,RN}

Ri={<aj1,...ji,...jN,aj1,...,ji+1,...,jN>|

0≤jk≤bk-1,1≤k≤N且ki,

0≤ji≤bi-2,

aj,...,j,...,j,aj,...j+1,...,j∈D,i=2,...,N}

基本操作:

InitArray(&A,n,bound1,...,boundn)

操作結(jié)果:若維數(shù)n和各維長(zhǎng)度合法,則構(gòu)造相應(yīng)的數(shù)組A。

DestroyArray(&A)

初始條件:數(shù)組A已經(jīng)存在。

操作結(jié)果:銷毀數(shù)組A。

Value(A,&e,index1,...,indexn)

初始條件:A是n維數(shù)組,e為元素變量,隨后是n個(gè)下標(biāo)值。

操作結(jié)果:若各下標(biāo)不超界,則e賦值為所指定的A的元素值,并返回OK。

Assign(&A,e,index1,...,indexn)

初始條件:A是n維數(shù)組,e為元素變量,隨后是n個(gè)下標(biāo)值。

操作結(jié)果:若下標(biāo)不超界,則將e的值賦給A中指定下標(biāo)的元素。

}ADTArray2、數(shù)組的存儲(chǔ)結(jié)構(gòu)由于數(shù)組類型不作插入和刪除的操作,因此只需要通過(guò)"順序映象"得到它的存儲(chǔ)結(jié)構(gòu),即借助數(shù)據(jù)元素在存儲(chǔ)器中的相對(duì)位置來(lái)表示數(shù)據(jù)元素之間的邏輯關(guān)系。

通常有兩種映象方法:即"以行(序)為主(序)"的映象方法和"以列(序)為主(序)"的映象方法。

以圖示的二維數(shù)組為例,"以行為主"的存儲(chǔ)結(jié)構(gòu)是對(duì)二維數(shù)組進(jìn)行"按行切分",即將數(shù)組中的數(shù)據(jù)元素"按行依次排放"在存儲(chǔ)器中;"以列為主"的存儲(chǔ)結(jié)構(gòu)是對(duì)二維數(shù)組進(jìn)行"按列切分",即將數(shù)組中的數(shù)據(jù)元素"按列依次排放"在存儲(chǔ)器中。

假設(shè)二維數(shù)組R[m][n]中每個(gè)數(shù)據(jù)元素占L個(gè)存儲(chǔ)地址,并以LOC(i,j)表示下標(biāo)為(i,j)的數(shù)據(jù)元素的存儲(chǔ)地址,則該數(shù)組中任何一對(duì)下標(biāo)(i,j)對(duì)應(yīng)的數(shù)據(jù)元素在"以行為主"的順序映象中的存儲(chǔ)地址為:

LOC(i,j)=LOC(0,0)+(in+j)L

在"以列為主"的順序映象中的存儲(chǔ)地址為:

LOC(i,j)=LOC(0,0)+(jm+i)L

其中LOC(0,0)是二維數(shù)組中第一個(gè)數(shù)據(jù)元素(下標(biāo)為(0,0))的存儲(chǔ)地址,稱為數(shù)組的"基地址"或"基址"。類似地,假設(shè)三維數(shù)組R[p][m][n]中每個(gè)數(shù)據(jù)元素占L個(gè)存儲(chǔ)地址,并以LOC(i,j,k)表示下標(biāo)為(i,j,k)的數(shù)據(jù)元素的存儲(chǔ)地址,則該數(shù)組中任何一對(duì)下標(biāo)(i,j,k)對(duì)應(yīng)的數(shù)據(jù)元素在"以行為主"的順序映象中的存儲(chǔ)地址為:

LOC(i,j,k)=LOC(0,0,0)+(i×m×n+j×n+k)×L

推廣到N維數(shù)組,則得到

LOC(j1,j2,...jn,)=LOC+(b2×...×bn×j1+b3×...×bn×j2+...+bn×jn-1+jn)×L

=LOC(0,0,...,0)+()×L

可縮寫(xiě)成

LOC(j1,j2,...jn,)=LOC(0,0,...,0)+

其中Cn=L,Ci-1=bi×Ci,1<i≤N。5.2矩陣的壓縮存儲(chǔ)結(jié)構(gòu)特殊矩陣的壓縮存儲(chǔ)方法

如果矩陣中值相同的元素或零元素在矩陣中的分布有一定規(guī)律,則稱之謂"特殊矩陣"。大致有這樣三類特殊矩陣:

1.對(duì)稱矩陣:若n階方陣A中的元滿足特性

aij=aji1≤i,j≤n

則稱為n階對(duì)稱矩陣;

2.三角矩陣:若n階方陣中下(上)三角(不包括對(duì)角線)中的元均為常量c或0,則稱為上(下)三角矩陣;

3.對(duì)角矩陣:若n階方陣中的非零值元都集中在以主對(duì)角線為中心的(由k條對(duì)角線組成的)帶狀區(qū)域中,則稱為k對(duì)角矩陣。

若為對(duì)稱矩陣中的每一對(duì)值相同的元素分配一個(gè)存儲(chǔ)空間,則可將矩陣中n2個(gè)元壓縮存儲(chǔ)到n(n+1)/2個(gè)存儲(chǔ)空間中。

假設(shè)以一維數(shù)組sa[n(n+1)/2]壓縮存儲(chǔ)n階對(duì)稱方陣A,則一維數(shù)組中的數(shù)據(jù)元素和方陣中的元之間存在著下列一一對(duì)應(yīng)的關(guān)系:

對(duì)于任意給定一對(duì)行列號(hào)(i,j),均可在sa中找到方陣的元aij,反之,對(duì)于所有的k=0,1,…,n(n+1)/2-1,都能確定sa[k]中的元素在矩陣中的位置(i,j)。

三角矩陣示例

對(duì)角矩陣示例

由于特殊矩陣中的非零值元素在矩陣中的分布有著一定的規(guī)律,則可將這些非零值元連續(xù)存儲(chǔ)在一個(gè)一維數(shù)組中。即矩陣中的任何一個(gè)元和它們?cè)谝痪S數(shù)組中的位置之間存在著某種"轉(zhuǎn)換關(guān)系",并且這種轉(zhuǎn)換關(guān)系可以用數(shù)學(xué)公式表示之。顯然,對(duì)于下(上)三角矩陣和對(duì)角矩陣也可得到類似對(duì)應(yīng)關(guān)系。教學(xué)總結(jié):本章節(jié)介紹了數(shù)組的基本定義,數(shù)組的順序存儲(chǔ)結(jié)構(gòu)特點(diǎn),對(duì)稱矩陣、上三角矩陣、下三角矩陣和三對(duì)角矩陣的壓縮存儲(chǔ),重點(diǎn)掌握數(shù)組下標(biāo)的轉(zhuǎn)換。

第次課學(xué)時(shí)授課時(shí)間__________教學(xué)主題稀疏矩陣教學(xué)要求1、掌握稀疏矩陣的特點(diǎn)。2、掌握稀疏矩陣的兩種壓縮存儲(chǔ)方法。教學(xué)重點(diǎn)稀疏矩陣的特點(diǎn);稀疏矩陣的三元組表示及其基本運(yùn)算算法設(shè)計(jì)。教學(xué)難點(diǎn)稀疏矩陣的三元組表示及其基本運(yùn)算算法設(shè)計(jì)。教學(xué)方法講授教學(xué)手段多媒體、板書(shū)講授要點(diǎn)1、稀疏矩陣的特點(diǎn)。2、稀疏矩陣的三元組和十字鏈表存儲(chǔ)結(jié)構(gòu)。作業(yè)參考資料教材:數(shù)據(jù)結(jié)構(gòu)教程(第5版),清華大學(xué)出版社,李春葆等2017。參考資料:數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言),清華大學(xué)出版社,嚴(yán)蔚敏吳偉民編著。注:本頁(yè)為每次課教案首頁(yè)石家莊學(xué)院教案紙(續(xù)頁(yè))教學(xué)內(nèi)容備注與后記稀疏矩陣的存儲(chǔ)如果矩陣中只有少量的非零值元,并且這些非零值元在矩陣中的分布沒(méi)有一定規(guī)律,則稱為隨機(jī)稀疏矩陣,簡(jiǎn)稱為稀疏矩陣。至于矩陣中究竟含多少個(gè)零值元才被稱為是稀疏矩陣,目前還沒(méi)有一個(gè)確切的定義,它只是一個(gè)憑人的直覺(jué)來(lái)了解的概念。假設(shè)在mn的矩陣中有t個(gè)非零值元,令,稱§為矩陣的稀疏因子,則通常認(rèn)定§≤0.05的矩陣為稀疏矩陣。如何存儲(chǔ)稀疏矩陣中的非零值元?

由于壓縮存儲(chǔ)的基本宗旨是只存放矩陣中的非零值元,則在存儲(chǔ)非零元的值的同時(shí)必須記下它在矩陣中的位置(i,j),反之,一個(gè)三元組(i,j,aij)唯一確定了矩陣A中的一個(gè)非零值元,由此可以"其數(shù)據(jù)元素為上述三元組的線性表"表示稀疏矩陣,并且非零元在三元組線性表中是"以行為主"有序排列的。相應(yīng)于線性表的兩種存儲(chǔ)結(jié)構(gòu)可得到稀疏矩陣的不同壓縮存儲(chǔ)方法。例如表示矩陣

的三元組線性表為:

((1,3,9),(1,5,-7),(3,4,8),(4,1,5),(4,6,2),(5,2,16))元組順序表

稀疏矩陣的三元組順序表的結(jié)構(gòu)定義

constMAXTERMS=12500;//假設(shè)非零元個(gè)數(shù)的最大值為12500

typedefstruct{

inti,j;//該非零元的行號(hào)和列號(hào)

ElemTypee;//該非零元的值

}Triple;//三元組

typedefstruct{

Tripledata[MAXTERMS+1];//非零元三元組表,data[0]未用

introws,cols,terms;//矩陣的行數(shù)、列數(shù)和非零元的個(gè)數(shù)

}TSMatrix;//三元組順序表算法實(shí)現(xiàn),將稀疏矩陣轉(zhuǎn)換為三元組#include<stdio.h>#include<malloc.h>voidmain(){//定義一個(gè)二維數(shù)組 inta[10][10]; inti,j; intk=0; //構(gòu)造一個(gè)測(cè)試二維數(shù)組 for(i=0;i<10;i++) for(j=i;j<10;j++){ a[j][i]=a[i][j]=k++; if(j==i){ a[i][j]=0; } }//打印二維數(shù)組 printf("原矩陣\n"); for(i=0;i<10;i++){for(j=0;j<10;j++) printf("%3d",a[i][j]); printf("\n"); } printf("\n");//特殊矩陣為一維數(shù)組 intn=10; n=n*(n+1)/2;//首尾相加乘以個(gè)數(shù)除以2 int*b=(int*)malloc(n*sizeof(int)); for(i=0;i<10;i++) for(j=0;j<10;j++) if(j>=i) b[(j+1)*j/2+i]=a[i][j]; printf("轉(zhuǎn)化后矩陣(二維打印)\n"); k=1; for(i=0;i<n;i++){ printf("%3d",b[i]); if(i+1==k*(k+1)/2){//也可根據(jù)0換行 k++; printf("\n"); }} printf("\n"); printf("轉(zhuǎn)化后矩陣(一維打印)\n"); for(i=0;i<n;i++) printf("%3d",b[i]); printf("\n\n"); //根據(jù)一維矩陣轉(zhuǎn)換為二維矩陣 printf("數(shù)據(jù)還原\n"); inttemp[10][10]; for(i=0;i<10;i++) for(j=0;j<10;j++) if(i<=j) temp[i][j]=b[j*(j+1)/2+i]; else temp[i][j]=b[i*(i+1)/2+j]; //打印轉(zhuǎn)化后的矩陣 for(i=0;i<10;i++){ for(j=0;j<10;j++) printf("%3d",temp[i][j]);printf("\n"); }}教學(xué)總結(jié):本章節(jié)主要介紹了稀疏矩陣的特點(diǎn)以及兩種壓縮存儲(chǔ)方式。5.3廣義表一、教學(xué)目標(biāo)理解廣義表的定義、特點(diǎn)及基本術(shù)語(yǔ);掌握廣義表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)(頭尾表示法、孩子兄弟表示法)的C語(yǔ)言實(shí)現(xiàn);掌握廣義表的基本運(yùn)算(求長(zhǎng)度、求深度、遍歷、查找元素)的算法設(shè)計(jì)與代碼實(shí)現(xiàn);培養(yǎng)基于鏈?zhǔn)浇Y(jié)構(gòu)的編程思維和問(wèn)題解決能力。二、教學(xué)重難點(diǎn)重點(diǎn):廣義表的存儲(chǔ)結(jié)構(gòu)、求深度/長(zhǎng)度的算法、遍歷算法;難點(diǎn):廣義表深度的遞歸求解、復(fù)雜廣義表的遍歷邏輯。三、教學(xué)過(guò)程(一)廣義表的定義1.核心概念廣義表(GeneralizedList)簡(jiǎn)稱GList,是線性表的推廣,定義為:廣義表是n(n≥0)個(gè)元素的有限序列,記作LS=(a1,a2,...,an)。其中:ai可以是單個(gè)元素(稱為原子,Atom),也可以是另一個(gè)廣義表(稱為子表,SubList);n為廣義表的長(zhǎng)度,n=0時(shí)稱為空表;廣義表的深度指表中括號(hào)的最大嵌套層數(shù)(原子深度為0,空表深度為1)。2.示例解析(幫助理解)廣義表表示 說(shuō)明A=()空表,長(zhǎng)度0,深度1B=(a,b)原子表,長(zhǎng)度2,深度1(元素均為原子)C=(a,(b,c))混合表,長(zhǎng)度2(a和子表(b,c)),深度2D=(A,B,C)子表嵌套,長(zhǎng)度3(A/B/C均為廣義表),深度3(C的深度2+外層1)E=(a,E)遞歸表(循環(huán)表),長(zhǎng)度2,深度∞(嵌套無(wú)終止)3.核心特點(diǎn)層次性:元素可以是原子或子表,具有嵌套結(jié)構(gòu);共享性:多個(gè)廣義表可共享同一個(gè)子表(如D共享A/B/C);遞歸性:廣義表可以包含自身(如E)。(二)廣義表的存儲(chǔ)結(jié)構(gòu)(C語(yǔ)言實(shí)現(xiàn))廣義表的元素類型不統(tǒng)一(原子/子表),因此無(wú)法用順序存儲(chǔ),只能用鏈?zhǔn)酱鎯?chǔ)。常用兩種方式:1.頭尾表示法(重點(diǎn))(1)存儲(chǔ)思想廣義表可拆分為“表頭(Head)”和“表尾(Tail)”:表頭:廣義表的第一個(gè)元素(可以是原子或子表);表尾:除去表頭后剩余元素構(gòu)成的廣義表(一定是子表)。例如:C=(a,(b,c)),表頭是a(原子),表尾是((b,c))(子表)。(2)節(jié)點(diǎn)結(jié)構(gòu)設(shè)計(jì)需要兩種節(jié)點(diǎn):原子節(jié)點(diǎn)、表節(jié)點(diǎn):c運(yùn)行#include<stdio.h>#include<stdlib.h>#include<string.h>//節(jié)點(diǎn)類型枚舉typedefenum{ATOM,//原子節(jié)點(diǎn)LIST//表節(jié)點(diǎn)}NodeType;//廣義表節(jié)點(diǎn)結(jié)構(gòu)體(頭尾表示法)typedefstructGListNode{NodeTypetype;//節(jié)點(diǎn)類型:原子/表union{//共用體:原子值或表的頭尾指針charatom;//原子節(jié)點(diǎn):存儲(chǔ)字符型原子(如'a'、'b')struct{//表節(jié)點(diǎn):存儲(chǔ)表頭、表尾指針structGListNode*head;structGListNode*tail;}list;}data;}GListNode,*GList;(3)廣義表的創(chuàng)建(字符串解析)輸入格式示例:(a,(b,c)),遞歸創(chuàng)建廣義表:c運(yùn)行//輔助函數(shù):跳過(guò)字符串中的空格voidskipSpace(char**str){while(**str=='')(*str)++;}//遞歸創(chuàng)建廣義表(輸入字符串如:"(a,(b,c))")intCreateGList(GList*L,char**str){skipSpace(str);if(**str==')'){//空表(如遇到"()"中的')')(*str)++;*L=NULL;return1;}if(**str=='('){//表節(jié)點(diǎn)開(kāi)始(*str)++;*L=(GListNode*)malloc(sizeof(GListNode));if(!*L)return0;//內(nèi)存分配失敗(*L)->type=LIST;//遞歸創(chuàng)建表頭if(!CreateGList(&((*L)->data.list.head),str))return0;skipSpace(str);if(**str==','){//有表尾,遞歸創(chuàng)建(*str)++;if(!CreateGList(&((*L)->data.list.tail),str))return0;}else{//無(wú)表尾,表尾置空(*L)->data.list.tail=NULL;}skipSpace(str);if(**str==')')(*str)++;//跳過(guò)表結(jié)束符}elseif((**str>='a'&&**str<='z')||(**str>='A'&&**str<='Z')){//原子節(jié)點(diǎn)*L=(GListNode*)malloc(sizeof(GListNode));if(!*L)return0;(*L)->type=ATOM;(*L)->data.atom=**str;(*str)++;}else{return0;//非法字符}return1;}//封裝創(chuàng)建函數(shù)(對(duì)外接口)GListCreateGListFromStr(char*str){GListL=NULL;char*p=str;if(*p=='('){CreateGList(&L,&p);}returnL;}2.孩子兄弟表示法(拓展)(1)存儲(chǔ)思想將廣義表視為樹(shù)形結(jié)構(gòu):每個(gè)節(jié)點(diǎn)有兩個(gè)指針:child(指向第一個(gè)子元素)、next(指向同一層的下一個(gè)兄弟元素);原子節(jié)點(diǎn)無(wú)child指針。(2)節(jié)點(diǎn)結(jié)構(gòu)設(shè)計(jì)c運(yùn)行//廣義表節(jié)點(diǎn)結(jié)構(gòu)體(孩子兄弟表示法)typedefstructCSNode{NodeTypetype;//節(jié)點(diǎn)類型:原子/表union{charatom;structCSNode*child;//表節(jié)點(diǎn)的第一個(gè)子元素}data;structCSNode*next;//指向兄弟節(jié)點(diǎn)}CSNode,*CSGList;(注:創(chuàng)建/運(yùn)算邏輯類似頭尾表示法,核心是“孩子+兄弟”的遍歷思路,本節(jié)重點(diǎn)講頭尾表示法)(三)廣義表的基本運(yùn)算(C語(yǔ)言實(shí)現(xiàn))基于“頭尾表示法”實(shí)現(xiàn)核心運(yùn)算,所有運(yùn)算均基于遞歸(適配廣義表的嵌套特性)。1.求廣義表的長(zhǎng)度定義:廣義表第一層元素的個(gè)數(shù)(空表長(zhǎng)度為0);思路:表尾是“除去表頭后的剩余元素”,因此長(zhǎng)度=1+表尾的長(zhǎng)度(遞歸)。c運(yùn)行//求廣義表的長(zhǎng)度(第一層元素個(gè)數(shù))intGListLength(GListL){if(L==NULL)return0;//空表長(zhǎng)度0if(L->type==ATOM)return1;//單個(gè)原子(特殊情況:如廣義表是單個(gè)原子a)//表節(jié)點(diǎn):長(zhǎng)度=1+表尾的長(zhǎng)度return1+GListLength(L->data.list.tail);}2.求廣義表的深度定義:括號(hào)的最大嵌套層數(shù)(空表深度1,原子深度0);思路:深度=max(表頭深度,表尾深度)+1(表節(jié)點(diǎn));原子深度為0。c運(yùn)行//求廣義表的深度(括號(hào)最大嵌套層數(shù))intGListDepth(GListL){if(L==NULL)return1;//空表深度1if(L->type==ATOM)return0;//原子深度0//表節(jié)點(diǎn):遞歸求表頭、表尾的深度intdepth_head=GListDepth(L->data.list.head);intdepth_tail=GListDepth(L->data.list.tail);//深度=表頭/表尾深度的最大值+1return(depth_head>depth_tail?depth_head:depth_tail)+1;}3.遍歷廣義表(輸出)思路:遞歸遍歷,原子直接輸出,表節(jié)點(diǎn)輸出括號(hào)+遞歸遍歷表頭/表尾。c運(yùn)行//遍歷并輸出廣義表voidTraverseGList(GListL){if(L==NULL){//空表printf("()");return;}if(L->type==ATOM){//原子節(jié)點(diǎn)printf("%c",L->data.atom);return;}//表節(jié)點(diǎn):輸出左括號(hào)+遍歷表頭+遍歷表尾printf("(");TraverseGList(L->data.list.head);//遍歷表頭GListNode*p=L->data.list.tail;while(p!=NULL){//遍歷表尾(多個(gè)元素用逗號(hào)分隔)printf(",");TraverseGList(p->data.list.head);//表尾的表頭是下一個(gè)元素p=p->data.list.tail;}printf(")");}4.查找元素是否存在思路:遞歸查找表頭,若不存在則查找表尾,原子節(jié)點(diǎn)直接比較值。c運(yùn)行//查找廣義表中是否存在指定原子元素intFindGListElem(GListL,charelem){if(L==NULL)return0;//空表,不存在if(L->type==ATOM){//原子節(jié)點(diǎn),直接比較return(L->data.atom==elem)?1:0;}//表節(jié)點(diǎn):遞歸查找表頭+表尾returnFindGListElem(L->data.list.head,elem)||FindGListElem(L->

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論