freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)(上)ppt-資料下載頁

2024-10-18 15:43本頁面
  

【正文】 7 j++。 i++。 8 } 9 else 10 if ( j == 0) i++。 11 else j = [j1] + 1。 // while結(jié)束 12 if (( j LengthP) | | LengthP == 0)) return –1。 13 else return i LengthP 。 14} // FastFind 結(jié)束 JYP 103 對(duì) FastFind的分析: ? 第 10行共最多可執(zhí)行 LengthS次,因?yàn)槊看?i都增加 1,且 i在算法中從不減少。 ? j最多可增加至 LengthS(第 7行)。 ? 執(zhí)行第 11行的條件是 j 0,且每次 j至少減少 1(注意 f(j–1)+1 (j–1)+1=j),所以此行最多執(zhí)行LengthS次。 因此, FastFind的總計(jì)算時(shí)間是 O( LengthS)。 JYP 104 失敗函數(shù) f的計(jì)算 : ? f(0) = –1。 ? 假設(shè)已有 f(j–1),則可通過以下觀察計(jì) 算 f(j): 若 a = b,則 f(j) = f(j1)+1,否則(標(biāo)記 f1(j) = f(j),fm(j) = f( fm1(j))) JYP 105 若 a = c,則 f(j) = f2(j1)+1,否則可以繼續(xù)計(jì)算下去,直至找到某個(gè) m,使第 fm(j–1)+1個(gè)位置的字符與 a相等,或 fm(j–1) = –1且第 0位置的字符仍不等于 a。 JYP 106 由此,可得失敗函數(shù)的另一種定義形式: f(j) = –1 如果 j=0 fm(j–1)+1 m是使得 pfk(j1)+1=pj 的最小的 k –1 如果上述 k不存在 由此定義可直接得出計(jì)算 f 的算法 fail。 JYP 107 1 void String::fail ( ) { // 計(jì)算模式 p ( *this)的失敗函數(shù) 2 int LengthP= Length( )。 f[0]= 1。 3 for (int j = 1。 j LengthP。 j++) { // 計(jì)算 f[j] 4 int i = f[j1]。 5 while ((*(str+j)!=*(str+i+1)) amp。amp。 (i=0)) i=f[i]。 //尋找 m 6 if ( *(str+j) == *(str+i+1)) f[j] = i+1。 7 else f[j] = 1。 // 找不到滿足條件的 m 8 } // for 結(jié)束 9 } // fail 結(jié)束 對(duì) fail的分析: ? 由于 f(i) i, while循環(huán)每迭代一次 i至少減少 1。 JYP 108 ? i在 for循環(huán)中的第 4行被賦值,當(dāng) j=1時(shí) i=f(0)= –1,以后最多在上次值的基礎(chǔ)上加 1(當(dāng)上次執(zhí)行經(jīng)由第 6行時(shí))。由于第 4行共執(zhí)行 LengthP–1次, i的總增加值最多為 LengthP–1。 ? 如果每次至少減少 1,經(jīng)過 LengthP–1次減少, i必定小于 0。 while循環(huán)中的語句在整個(gè)算法中最多執(zhí)行 LengthP–1次。 因此, fail的計(jì)算時(shí)間為 O(LengthP )。 整個(gè)模式匹配問題可用 O(LengthP + LengthS)的時(shí)間完成。 JYP 109 作業(yè): P63—15, 16 JYP 110 棧 ? 棧 是一種受限的線性表,其插入和刪除操作只能在表的一端進(jìn)行,該端稱為 頂端 ( top)。 ? 棧 S = ( a0, …, a n1), a0是棧底元素, an1是棧頂元素, ai在 ai1之上( 0 i n)。 ? 由于最后插入的元素最先刪除,又稱棧為 后進(jìn)先出 ( LIFO)表,如下所示: JYP 111 抽象數(shù)據(jù)類型 Stack template class Type class Stack { public: Stack ( int MaxStackSize = DefaultSize)。 Boolean IsFull( )。 void Add(const Typeamp。 item)。 Boolean IsEmpty( )。 Type* Delete( Typeamp。 )。 }。 Delete操作返回棧頂元素的指針,棧為空時(shí)返回 0。為確保該指針?biāo)傅臄?shù)據(jù)在 Delete函數(shù)結(jié)束仍然 JYP 112 存在,采用一個(gè)引用參數(shù),將被刪除元素復(fù)制到該引用參數(shù),并返回該參數(shù)的指針。 棧的表示 最簡單方法是用一維數(shù)組,如 stack[MaxSize] ,再用變量 top指示棧頂元素。 top = –1表示???。 Stack的數(shù)據(jù)成員: private: int top。 Type* stack。 int MaxSize。 JYP 113 Stack的構(gòu)造函數(shù): template class Type StackType::Stack(int MaxStackSize):MaxSize(MaxStackSize) { stack = new Type[MaxSize]。 top = 1。 } IsFull( )的實(shí)現(xiàn): template class Type inline Boolean StackType::IsFull( ) { if (top == MaxSize1) return TRUE。 else return FALSE。 } JYP 114 IsEmpty( )的實(shí)現(xiàn): template class Type inline Boolean StackType::IsFull( ) { if (top == 1) return TRUE。 else return FALSE。 } Add的實(shí)現(xiàn): template class Type void StackType::Add(const Typeamp。 x) { if (IsFull( )) StackFull( )。 else stack[++top] = x。 } JYP 115 Delete的實(shí)現(xiàn): template class Type Type* StackType::Delete( Typeamp。 x) { if (IsEmpty( )) { StackEmpty( )。 return 0。}。 x = stack[top]。 return amp。x。 } StackFull( )和 StackEmpty( )的實(shí)現(xiàn)依賴于具體的應(yīng)用。 作業(yè): P63—19 JYP 116 隊(duì)列 ? 隊(duì)列 是另一種受限的線性表,其插入操作只能在表的尾端( rear)進(jìn)行,刪除操作只能在表的前端( front)進(jìn)行。 ? 隊(duì)列 S = ( a0, …, a n1), a0是前端元素, an1是尾端元素, ai在 ai1之后( 0 i n)。 ? 由于最先插入的元素最先刪除,又稱棧為 先進(jìn)先出 ( FIFO)表,如下所示: JYP 117 抽象數(shù)據(jù)類型 Queue template class Type class Queue { public: Queue ( int MaxQueueSize = DefaultSize)。 Boolean IsFull( )。 void Add(const Typeamp。 item)。 Boolean IsEmpty( )。 Type* Delete( Typeamp。 )。 }。 JYP 118 隊(duì)列的表示 最簡單方法是用一個(gè)一維數(shù)組和兩個(gè)變量 front與rear。為了便于判斷隊(duì)列是否為空, front指向隊(duì)列第一個(gè)元素所在位置的前一個(gè), rear指向隊(duì)列最后一個(gè)元素所在位置。 Queue的數(shù)據(jù)成員: private: int front, rear。 Type* queue。 int MaxSize。 JYP 119 Queue的構(gòu)造函數(shù): template class Type QueueType::Queue(int MaxQueueSize): MaxSize(MaxQueueSize) { queue = new Type[MaxSize]。 front = rear = 1。 } IsFull( )的實(shí)現(xiàn): template class Type inline Boolean QueueType::IsFull( ) { if (rear==MaxSize1) return TRUE。 else return FALSE。 } JYP 120 IsEmpty( )的實(shí)現(xiàn): template class Type inline Boolean QueueType::IsEmpty( ) { if (front== rear) return TRUE。 else return FALSE。 } Add的實(shí)現(xiàn): template class Type void QueueType::Add(const Typeamp。 x) { if (IsFull( )) QueueFull( )。 else queue[++rear] = x。 } JYP 121 Delete的實(shí)現(xiàn): template class Type Type* QueueType::Delete( Typeamp。 x) { if (IsEmpty( )) { QueueEmpty( )。 return 0。}。 x = queue[++front]。 return amp。x。 } JYP 122 如下所示, IsFull( ) == TRUE并不一定表示隊(duì)列中有 MaxSize個(gè)元素: JYP 123 因此,將數(shù)組 queue[MaxSize]視為環(huán)狀隊(duì)列,如下所示: JYP 124 ? 判斷隊(duì)列是否為空的條件仍然是 front == rear。 ? front == rear也可能意味著隊(duì)列滿,造成了二義性。 ? 隊(duì)列為空時(shí)的 front == rear是由于刪除操作使front ―追?上 rear所致;而隊(duì)列滿的時(shí)候, front == rear是由于加入操作使 rear ―追?上 front所致。 ? 為了消除二義性,只允許隊(duì)列容納最多 MaxSize – 1個(gè)元素,使得 rear 永遠(yuǎn)?追?不上 front。 JYP 125 通過整數(shù)模運(yùn)算 ( %) 可實(shí)現(xiàn) front和 rear沿著順時(shí)針方向移動(dòng)一個(gè)位置 , 從而得到環(huán)狀隊(duì)列 Add和Delete操作的實(shí)現(xiàn)算法: template class Type void QueueType::Add(const Typeamp。 x) { int k = (rear + 1) % MaxSize。 if (front == k) QueueFull( )。 else queue[rear = k] = x。 } JYP 126 template class Type Type* QueueType::Delete( Typeamp。 x) { if (front == rear) { QueueEmpty( )。 return 0。}。 x = queue[++front % = MaxSize]。 return amp。x。 } 顯然, Add和 Delete的計(jì)算時(shí)間都是 O(1) 。與棧的情況類似, QueueFull( )和 QueueEmpty( )的實(shí)現(xiàn)也依賴于具體的應(yīng)用。 作業(yè): P64—21 JYP 127 迷宮問題 迷宮: JYP 128 問題: 如果存在從入口到出口的路徑,則求出一條這樣的路徑。 表示: ? 二維數(shù)組 maze[i][j]( 1≤i≤m, 1≤j≤n)。 ? maze[i][j]=0表示點(diǎn) [i][j]可通行, maze[i][j]=1表示點(diǎn) [i][j]不可通行。 ? 入口為 [1][1],出口為 [m][n
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1