1樓:來鑲天
剛學都這樣,想當初我學習的時候連一個單連結串列的逆置,都要理解半天。程式設計就是把實際問題給抽象成數學或非數學模型,結合資料的表示,再找到解決的方法。別忘了,學習資料結構是為了更好的運算元據。
思路:首先,迷宮如何用計算機語言表示?一般用二維陣列。0表示牆,1表示路。
其次,其次就是如何從迷宮中走出來了。結合堆疊,進行搜尋。
你可以嘗試著對問題進行分層,然後逐步細化來解決。
如果你要解決一個別人給的走迷宮的問題,同樣還是要這樣,首先把別人給的迷宮在計算機中表示出來,其次結合資料結構所學的知識,找到通路,(關於結合資料結構的知識就看你自己的了,關鍵是對堆疊的瞭解)。
關於你說的,先看別人的程式,找到思路後自己才能程式設計問題。我看你是操之過急了,你得明白,知識的學習,首先就是會模仿,等你對整個課程有了系統的認識,你才會有自己的解題思路。創新是在有基礎的前提下進行的。
別人的東西,試著理解,畢竟許多東西單憑我們自己是不太可能想出來的,就像kmp演算法一樣(你應該馬上就會學到)。
第一章說過,研究資料間的關係的目的是為了更好的運算元據,迷宮問題,可以說是一類「搜尋」問題,更強調的是演算法,即在精通堆疊的基礎上想出一個利用堆疊對迷宮進行搜尋的辦法。而堆疊,則是基礎,堆疊的操作就那麼幾個,學完馬上就會用。關鍵是如何運用三種程式設計方法再結合某些資料結構設計出一個演算法。
一步一步來吧。
對了,給你一個問題考慮考慮,「不用任何輔助變數」編寫一個程式,逆置一個字串試試。只給你一個引數:該引數就是指向字串的指標。
你的最後問題問的就有點沒頭緒了,學習的過程並不是你想的那樣的,不見得資料結構學完之後就能編寫高質量程式,寫程式和看程式是相輔相成的,寫而不學則怠,學而不寫則罔。可以嘗試的寫寫,自己找不到思路可以看看別人是怎麼想的,自己多做做總結。
2樓:天降神兵
#include"iostream.h"
#include"stdlib.h"
#include"stdio.h"
#define m 10
#define n 10
struct mark //定義迷宮內點的座標型別
; struct element //棧元素
; typedef struct lstack //鏈棧
*plstack;
int initstack(plstack &s)
int stackempty(plstack s)
else
return 0;
} void mazepath(struct mark start,struct mark end,int maze[m][n],int diradd[4][2])
while(s2)
printf("成功 !\n");
return;
} if(maze[a][b]==0) //找到可以前進的非出口的點
d++;
} }printf("沒有找到可以走出此迷宮的路徑,等著憋死吧!\n");
} void initmaze(int maze[m][n])
for(j=0;j<=n+1;j++)
for(i=0;i<=m+1;i++) //輸出迷宮 }
void main()
,,,};//行增量和列增量 方向依次為東西南北
initmaze(sto);//建立迷宮
printf("輸入入口的橫座標,縱座標[逗號隔開]\n");
printf("輸入出口的橫座標,縱座標[逗號隔開]\n");
scanf("%d,%d",&end.x,&end.y);
mazepath(start,end,sto,add); //尋找路徑}
3樓:鬆睿博
最好就是自己先想一下怎麼入手~然後編一個大概框架出來,再進行慢慢的改進。做完之後再上網看看別人的答案如何!然後分析一下自己的做法跟別人的有什麼不同,彼此有什麼優劣之別~進行總結!
如果一開始就一味模仿別人的演算法,那就沒意義了,永遠進步不了,沒有屬於自己的演算法!好的程式設計師是會自己研究出一套比別人更好的演算法!
4樓:匿名使用者
去這裡看看 學習程式設計做為一個初學者第一首先找到別人程式 然後完全的看懂別人程式的思路 實現手段 然後自己在做一進一步的加強。上面是一個c語言實現迷宮問題的完整例子
5樓:匿名使用者
迷宮麼,自然該有入口和出口,結合資料結構,每一個小方格是一個結構,小方格有入口和出口,隨即生成n*n個小方格,然後從(0,0)開始遍歷整個陣列,進入每一個小方格,由入口開始對其他的三個方向搜尋是否有出口,有,則從出口(即下一個小方格的入口)進入下一個方格,並要儲存此位置用於後面出現死路返回,如此類推
講的不是很清楚,大概這樣思考吧~~
6樓:問知道人
我也是剛學資料結構的,實驗寫迷宮問題,看了半天才把書上的演算法看懂,用c語言些了個迷宮程式,編譯沒有問題了,執行不出結果,還不知道哪兒錯了,正放網上請大俠幫忙看呢!學程式設計要把c語言學好才行!
7樓:王拔沃爾雲
void
creatstack(stacknode
*s)/*建立鏈式棧*/
這裡錯了,如果你用的是c++開發工具,就改為voidcreatstack(stacknode
*&s) ,如果用的是tc2.0的話,就要用指向指標的指標,或者返回型別是stacknode
*也可以,例如
stacknode
*creatstack()
{stacknode
*s=(stacknode
*)malloc(sizeof(stacknode));s->next=null;
returns;}
怎么學好資料結構C語言版,怎麼學好資料結構C語言版
其實學資料結構不用上機,但是你要自己寫 各種結構的定義,內部操作的函式實現。另外就是理解為主,明白怎麼回事了記東西才容易,而且效率比較高。另外就是做些小的練習題,畢竟再難的題也是小問題的疊加而已,所有小問題掌握了,大的問題拆開就是小問題,所以難的問題你也就會解決了3q 自學是成為高手的唯一出路 借多...
c語言資料結構中鏈棧的問題,C語言資料結構中鏈棧的問題
這個鏈棧應該bai就是一個du 用連結串列弄的後進先出的 zhi棧結構dao。top指標永遠指向棧的最上面的回那個節點。這個函式是新加一個節點到這個棧中,首先分配了空間給s,s是要新加入這個棧的那個節點。s next top 就是讓s指向棧的最上面的那個元素。top s 因為現在最上面的節點是s了,...
下面的程式不能執行,錯哪了資料結構C語言版
include stdio.h include malloc.h define ok 1 define error 0 define overflow 2 define list init size 100 define listincrement 10 typedef struct sqlist ...