- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程式12环状伫列
第三章 堆疊和佇列 資料結構與演算法 徐熊健 大 綱 3.1 堆疊 3.2 堆疊的基本運算 3.3 佇列 3.4 佇列的基本運算 3.5 環狀佇列 3.6 老鼠走迷宮 3.7 運算式的轉換和求值 堆疊和佇列 堆疊擁有的共同特性就是—先行進入者將較後離去(first in last out, 或簡稱FILO)、或後來進入者可先行離去(last in first out, 或簡稱LIFO)。 佇列共同特性在於—先行進入者將率先離去(first in first out, 或簡稱FIFO)。 3.1 堆疊 程序呼叫之範例一 堆疊解決堆疊程序呼叫時流程轉移的過程 程序呼叫之範例二 堆疊的操作過程 3.2 堆疊的基本運算 程式3-1 堆疊的宣告 1 #define maxsize 5; 2 int stack[maxsize]; 3 int top= -1; Push 運算 程式3-2 1 void push(int element) 2 { if (IsFull( )) StackFull(); 3 else Stack[++top]=element; 4 } Pop 運算 程式3-3 1 int pop() 2 { if (IsEmpty()) 3 { StackEmpty(); 4 return -1; 5 } 6 return Stack[top--]; 7 } IsFull運算及IsEmpty運算 程式3-4 IsFull運算 1 int IsFull( ) 2 { if(top == maxsize-1) return 1; 3 else return 0; 4 } 程式3-5 IsEmpty運算 1 int IsEmpty() 2 { if ( top == -1) return 1; 3 else return 0; 4 } 3.3 佇 列 佇列 (queue) 是一個有序串列,為達成先進先出FIFO的效果,所有加入的動作皆在固定的一端進行,而所有刪除的動作則在另一端進行。 若Q = (ai, ai+1, … , aj) 為一佇列,我們稱ai為前端 (front) 元素,aj為後端 (rear) 元素 資料的加入乃在Q的後端進行,資料的刪除則由Q的前端進行,如此即可形成先進先出的資料結構。 佇列的邏輯圖示及其基本運算 依序增加元素進入佇列中 3.4 佇列的基本運算 程式3-7 佇列的宣告 1 #define maxsize 10; 2 int Queue[maxsize]; 3 int front = -1; 4 int rear = -1; 程式3-8 addQ運算 1 void addQ(int element) 2 { if (IsQFull()) QueueFull (); 3 else Queue [++rear]= element; 4 } deleteQ 運算 程式3-9 1 int deleteQ() 2 { if (IsQEmpty()) 3 { QueueEmpty(); 4 return 0; 5 } 6 else return Queue[++front]; 7 } IsQEmpty運算及IsQFull運算 程式3-10 IsQEmpty運算 1 int IsQEmpty() 2 { if (rear == front) return 1; 3 return 0 ; 4 } 程式3-11 IsQFull運算 1 int IsQFull() 2 { if (rear == maxsize-1) return 1; 3 return 0; 4 } 3.5 環狀佇列 線性的陣列因陣列元素位置與註標之對應關係,使其不方便模擬佇列的增加、刪除的消長現象,而用過的空位無法再行利用; 不過若將線性的陣列折繞成環狀 (circular) 陣列,就可再次使用到空出的空間。 範例3-5 程式3-12 環狀佇列 1 #define maxsize 10; 2 int CQueue[maxsize]; 3 int front = 0; 4 int rear = 0; 5 6 void addCQ(int element) 7 { if (IsCQFull()) CQueueFull (); 8 else CQueue [++rear%maxsize] = element; 9 } 10 3.6 老鼠走迷宮 老鼠走迷宮是個有趣的心理實驗,把老鼠放入迷宮中,老鼠可靠單純的嚐試錯誤 (trial and error) 法,即找到出口。這種嚐試錯誤的策略並不考慮運算時間是否經濟,但對走迷宮這類毫無線索的問題,依然是個可行的
您可能关注的文档
- 社会责任标准SocialAccountability8000SA8000.doc
- 社会转型期艺术设计教育的创新.ppt
- 社区教育示范区评价标准.doc
- 社会文化的变迁教学活动.ppt
- 社团活动绩效评分项目.ppt
- 社区用户手册 e cins社区网 今网.doc
- 禁止使用计算机及手机.ppt
- 福岛核电站事故核辐射防护知识问答.doc
- 福州2012016第一学期九年级期末质量检测.doc
- 福州南台岛农大淮安单元控制性详细规划.doc
- 福莱特玻璃集团股份有限公司海外监管公告 - 福莱特玻璃集团股份有限公司2024年度环境、社会及管治报告.pdf
- 广哈通信:2024年度环境、社会及治理(ESG)报告.pdf
- 招商证券股份有限公司招商证券2024年度环境、社会及管治报告.pdf
- 宏信建设发展有限公司2024 可持续发展暨环境、社会及管治(ESG)报告.pdf
- 品创控股有限公司环境、社会及管治报告 2024.pdf
- 中信建投证券股份有限公司2024可持续发展暨环境、社会及管治报告.pdf
- 洛阳栾川钼业集团股份有限公司环境、社会及管治报告.pdf
- 361度国际有限公司二零二四年环境、社会及管治报告.pdf
- 中国神华能源股份有限公司2024年度环境、社会及管治报告.pdf
- 广西能源:2024年环境、社会及治理(ESG)报告.pdf
文档评论(0)