第一篇:2數據結構-實驗報告二(棧和隊列及其應用)
實驗二 棧和隊列及其應用
一、實驗目的
1.掌握棧和隊列這兩種抽象數據類型的特點,并能在相應的應用問題中正確選用它們。
2.熟練掌握棧類型的兩種實現方法。
3.熟練掌握循環隊列和鏈隊列的基本操作實現算法。
二、實驗內容
用隊列求解迷宮問題 [問題描述] 以一個M*N的長方陣表示迷宮,0和1分別表示迷宮中的通路和墻壁。設計一個程序,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。[基本要求] 實現一個以順序存儲結構的隊列類型,然后編寫一個求解迷宮的非遞歸程序。求得的通路以三元組(i,j,pre)的形式輸出,其中:(i,j)指示迷宮中的一個坐標,pre表示本路徑中上一個方塊在隊列中的下標。
[測試數據] 由學生任意指定。
三、源代碼
# include
//行數 //列數
//隊最多元素個數
//一個迷宮,其四周要加上均為1的外框{1,1, #define MaxSize 100 int mg[M+2][N+2]={ {1,1,1,1,1,1,1}, {1,0,0,0,0,0,1}, {1,0,1,0,0,1,1}, {1,0,1,0,0,1,1}, {1,0,1,0,1,0,1}, {1,0,0,0,0,0,1}, {1,1,1,1,1,1,1} };
typedef struct {int i,j;int pre;} Box;typedef struct { Box data[MaxSize];int front, rear;}QuType;void mgpath1(int xi,int yi,int xe,int ye)//搜索路徑為:(xi,yi){ void print(QuType qu, int front);->(xe,ye)
int i,j,find=0,di;QuType qu;//定義順序隊 qu.front=qu.rear=-1;qu.rear++;qu.data[qu.rear].i=xi;//(xi,yi)進隊 qu.data[qu.rear].j=yi;qu.data[qu.rear].pre=-1;mg[xi][yi]=-1;while(qu.front!=qu.rear&&!find){qu.front++;i=qu.data[qu.front].i;j=qu.data[qu.front].j;if(i==xe&&j==ye){find=1;print(qu,qu.front);
}
for
(di=0;di<4;di++)
{
switch(di)
{
case 0 :i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;case 1 :i=qu.data[qu.front].i;j=qu.data[qu.front].j+1;break;case 2 :i=qu.data[qu.front].i+1;j=qu.data[qu.front].j+1;break;case 3 :i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;
}
if(mg[i][j]==0)
{find=1;
qu.rear++;
qu.data[qu.rear].i=i;qu.data[qu.rear].j=j;
qu.data[qu.rear].pre=qu.front;
mg[i][j]=-1;
}
} } }
void print(QuType qu, int front){
int k=front,j,ns=0;
printf(“n”);do
{j=k;
k=qu.data[k].pre;
qu.data[j].pre=-1;
} while(k!=0);printf(“迷宮路徑如下:n”);k=0;while(k ns++; printf(“t(%d,%d)”,qu.data[k].i,qu.data[k].j); if(ns%5==0)printf(“n”);} k++;} printf(“n”);} void main() { mgpath1(1,1,M,N);printf(“迷宮所有路徑如下:n”); } 四、測試結果: 五、心得體會 做實驗首先要掌握大量的理論知識,然后認真去完成實驗。做實驗過程會碰見較大的困難,這就要需要我們的毅力。小小的迷宮隱藏大大的奧秘。 實驗5 棧和隊列的應用 目的和要求: (1)熟練棧和隊列的基本操作;(2)能夠利用棧與隊列進行簡單的應用。 一、題目 題目1.利用順序棧和隊列,實現一個棧和一個隊列,并利用其判斷一個字符串是否是回文。所謂回文,是指從前向后順讀和從后向前倒讀都一樣的字符串。例如,a+b&b+a等等。 題目2.假設在周末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求寫一算法模擬上述舞伴配對問題,并實現。 題目3.打印機提供的網絡共享打印功能采用了緩沖池技術,隊列就是實現這個緩沖技術的數據結構支持。每臺打印機具有一個隊列(緩沖池),用戶提交打印請求被寫入到隊列尾,當打印機空閑時,系統讀取隊列中第一個請求,打印并刪除之。請利用隊列的先進先出特性,完成打印機網絡共享的先來先服務功能。 題目4.假設以數組Q[m]存放循環隊列中的元素, 同時設置一個標志tag,以tag == 0和tag == 1來區別在隊頭指針(front)和隊尾指針(rear)相等時,隊列狀態為“空”還是“滿”。試編寫與此結構相應的插入(enqueue)和刪除(dlqueue)算法。 題目5.利用循環鏈隊列求解約瑟夫環問題。 請大家從本組未討論過的五道題中選擇一道,參照清華鄧俊輝老師MOOC視頻及課本相關知識,編寫相應程序。 選擇題目3: 打印機提供的網絡共享打印功能采用了緩沖池技術,隊列就是實現這個緩沖技術的數據結構支持。 二、程序清單 //Ch3.cpp #include { p=front; front=front->link; delete p;} };template if(front==NULL){//判斷是否為空 front=rear=new LinkNode front->data=rear->data=x; if(front==NULL)//分配結點失敗 return false;} else{ rear->link=new LinkNode rear->link->data=x; if(rear->link==NULL) return false; rear=rear->link;} return true;};template { return false;} cout< LinkNode delete p;//釋放原結點 return true;};void main() //主函數 { LinkedQueue char flag='Y'; //標志是否輸入了命令 const int max=30;//一次獲取輸入命令的最大個數 while(flag=='Y')//循環 { int i=0;char str[max];//定義存儲屏幕輸入的命令的數組 gets(str);//獲取屏幕輸入的命令 while(str[i]!='
主站蜘蛛池模板:
国产超碰av人人做人人爽|
精品久久久久久无码国产|
欧美日韩国产免费一区二区三区|
中文字幕无码视频手机免费看|
少妇放荡的呻吟干柴烈火免费视频|
各种虐奶头的视频无码|
久久综合九色综合欧美婷婷|
久久久亚洲欧洲日产国产成人无码|
无码一区二区三区av免费|
免费视频成人片在线观看|
免费精品国产自产拍在线观看|
精品欧美乱码久久久久久1区2区|
人妻丝袜av中文系列先锋影音|
亚洲欧美日韩v在线观看不卡|
国产极品久久久久久久久|
国产在线高清视频无码|
北条麻妃国产九九九精品视频|
免费无码a片一区二三区|
人妻有码精品视频在线|
日韩制服国产精品一区|
欧美性xxxx极品少妇|
久久精品国产自在天天线|
亚洲国产综合另类视频|
久久久久久人妻一区精品|
国产午夜免费高清久久影院|
精品免费久久久久久久|
精品国产aⅴ无码一区二区|
免费天堂无码人妻成人av电影|
国产乱子伦高清露脸对白|
鸭子tv国产在线永久播放|
人妻无码中文字幕一区二区三区|
国产乱理伦片在线观看|
99国产精品白浆在线观看免费|
浪潮av激情高潮国产精品|
精品成人无码中文字幕不卡|
99久久国产综合精麻豆|
国产精品激情欧美可乐视频|
亚洲精品无播放器在线播放|
99久久99久久久精品齐齐综合色圆|
毛片免费观看天天干天天爽|
成年日韩片av在线网站|
第二篇:實驗報告——棧和隊列的應用