導航:首頁 > 源碼編譯 > 畫圖演算法和數據結構

畫圖演算法和數據結構

發布時間:2023-03-10 20:01:51

⑴ 數據結構中圖的建立及演算法實現

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20
struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
};
struct Vnode
{
int data;
struct ArcNode *firstarc;
};
struct Vnode AdjList[MaxSize];
int m,n,v,cord;
void main()
{
void creatgraph(struct Vnode A[MaxSize]);
void dfs(struct Vnode A[MaxSize]);
do
{
printf("\n 主菜單");
printf("\n 1 建立無向圖的鄰接表");
printf("\n 2 按深度遍歷圖");
printf("\n 3 結束程序運行");
printf("\n-----------------------------------");
printf("\n 請輸入您的選擇 1, 2, 3 -->");
scanf("%d",&cord);
switch(cord)
{
case 1:
creatgraph(AdjList);
break;
case 2:
dfs(AdjList);
break;
case 3:
exit(0);
}
}while(cord<=3);
}//main end
void creatgraph(struct Vnode A[MaxSize])
{
int i,j,k;
struct ArcNode *p;
printf("input arces and vexes:");
scanf("%d %d",&m,&n);
for(k=0;k<n;k++)
{
printf("\ninput arc:");
scanf("%d%d",&i,&j);
p=(struct ArcNode*)malloc(sizeof(struct ArcNode));
p->adjvex=j;
p->nextarc=A[i-1].firstarc;
A[i-1].firstarc=p;
p=(struct ArcNode*)malloc(sizeof(struct ArcNode));
p->adjvex=i;
p->nextarc=A[j-1].firstarc;
A[j-1].firstarc=p;
}
printf("\n");
for(k=0;k<n;k++)
{
printf("%d",A[k].data);
p=A[k].firstarc;
while(p)
{
printf("%d",p->adjvex);
p=p->nextarc;
}
printf("\n");
}
}///creatgraph end
void dfs(struct Vnode A[MaxSize])
{
struct ArcNode *p,*ar[MaxSize];
int x,i,y,top=-1;
int visited[MaxSize];
for(i=0;i<n;i++)
visited[i]=0;
printf("\ninput x:");
scanf("%d",&x);
printf("%d",x);
visited[x-1]=1;
p=A[x-1].firstarc;
while((p)||(top>=0))
{
if(!p)
{
p=ar[top];
top--;
}
y=p->adjvex;
if(visited[y-1]==0)
{
visited[y-1]=1;
printf("->%d",y);
p=p->nextarc;
if(p)
{
top++;
ar[top]=p;
}
p=A[y-1].firstarc;
}
else p=p->nextarc;
}
}

⑵ 數據結構到底難在哪裡

(1)無法接受它的描述方式。數據結構的描述大多是抽象的形式,我們習慣了使用自然語言表達,難以接受數據結構的抽象表達。不止一個學生問我,書上的「ElemType」到底是什麼類型?運行時怎麼經常提示錯誤。它的意思就是「元素類型」,只是這樣來描述,你需要什麼類型就寫什麼類型,例如int。這樣的表達方式會讓不少人感到崩潰。

(2)不知道它有什麼用處。盡管很多人學習數據結構,但目的各不相同。有的人是應付考試,有的人是參加演算法競賽需要,而很多人不太清楚學習數據結構有什麼用處,迷迷糊糊看書、做題、考試。

(3)體會不到其中的妙處。由於教材、教師等各種因素影響,很多學生沒有體會到數據結構處理數據的妙處,經常為學不會而焦頭爛額,學習重在體會其中的樂趣,有樂趣才有興趣,興趣是最好的驅動力。

⑶ 演算法和數據結構有什麼區別

一、指代不同

1、演算法:是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令。

2、數據結構:指相互之間存在一種或多種特定關系的數據元素的集合。

二、目的不同

1、演算法:指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。

2、數據結構:研究的是數據的邏輯結構和數據的物理結構之間的相互關系,並對這種結構定義相適應的運算,設計出相應的演算法,並確保經過這些運算以後所得到的新結構仍保持原來的結構類型。


三、特點不同

1、演算法:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步驟,即每個計算步驟都可以在有限時間內完成。

2、數據結構:核心技術是分解與抽象。通過分解可以劃分出數據的3個層次;再通過抽象,舍棄數據元素的具體內容,就得到邏輯結構。

⑷ 數據結構和演算法

其實兩者是相輔相成的,沒有嚴格的要求先學哪個。
數據結構是演算法實現的基礎,演算法總是要依賴於某種數據結構來實現的。往往是在發展一種演算法的時候,構建了適合於這種演算法的數據結構。一種數據結構如果脫離了演算法,那還有什麼用呢?實際上也不存在一本書單純的講數據結構,或者單純的講演算法!當然兩者也是有一定區別的,個人覺得演算法更加的抽象一些,側重於對問題的建模,而數據結構則是具體實現方面的問題了。
個人建議是一起學,雖然現在中國很多大學都是先學的數據結構,但是其不合理性是很明顯的,這個也是我們學校一個比較爭論的話題。在學的時候一定要自己有個認識,兩者是同等重要的,不存在先學後學的問題。而且在學的過程中,更重要的是學習方法。

⑸ 數據結構與演算法基礎知識

1.數據結構的邏輯結構

(1)集合結構

(2)線性結構(存在唯一的第一個元素與唯一的最後一個元素)(eg: 線性表、隊列、棧、字元串、數組、鏈表)

(3)樹形結構(一對多)

(4)圖形結構(多對多)

2.數據結構的物理(存儲)結構

(1).順序存儲結構(插入與刪除低效因為要挪動其他元素的位置。但是遍歷簡單)

(2).鏈式存儲結構(插入與刪除高效,但是遍歷低效)

3.大O表示法(注意大O表示法表達的是最壞的情況)

規則:

(1)用常數1取代其他所有的常數(注意常數0也當1算)(3 -> 1, O(1))

(2) 只保留最高階項(n^3+2n^2+5 ->n^3, O(n^3))

(3) 若存在最高階,省略與其想成的常數(2n^3 -> n^3, O(n^3))

4. 時間復雜度類型

(1)常數階

(2)線性階

(3)平方階

(4)對數階

(5)立方階

(6)nlog階

(7)指數階(O(2^n)或O(n!), 往往會造成噩夢般的時間消耗)

5. 空間復雜度(用大O表示法求解改演算法的輔助空間即可,例如用於交換變數用的臨時變數的數量)

六. 順序存儲的線性表

線性表結構特點:

(1) 存在唯一一個的被稱作」第一個」的數據元素;

(2) 存在唯一一個的被稱作」第二個」的數據元素;

(3) 除了第一個元素以外,結構中的每個數據元素均有一個前驅;

(4) 除了最後一個元素以外,結構中的每個數據元素均有一個後繼。

七. 鏈式存儲的線性表(單鏈表)

首元結點是鏈表中第一個值域不為空的結點。

頭結點是一個值域為空且處於首位的結點。

首指針可指向首元結點也可指向頭結點,但是如果指向頭結點可以更加方便的處理單鏈表的插入和刪除問題,不用再對首位做額外判斷,並且指向頭節點的指針永遠不用變化。

*注意一下單鏈表的前插法和尾插法。尾插法更符合邏輯

閱讀全文

與畫圖演算法和數據結構相關的資料

熱點內容
空調壓縮機一直不停 瀏覽:509
養殖系統開發源碼 瀏覽:81
pdf的目錄 瀏覽:406
光遇安卓如何一個人拍視頻 瀏覽:277
怨女pdf 瀏覽:708
扭曲伺服器什麼時候開 瀏覽:23
加密貨幣換平台 瀏覽:609
手機內存壓縮軟體 瀏覽:33
生成樹是否與遍歷演算法有關 瀏覽:728
python強化學習迷宮 瀏覽:450
老包子解壓視頻 瀏覽:885
伺服器注冊是什麼意思 瀏覽:418
程序員群體焦慮如何破局 瀏覽:585
程序員在廣州上班 瀏覽:803
androidlinuxadt 瀏覽:512
廣聯達軟體加密鎖原裝晶元 瀏覽:338
如何打開資料庫伺服器 瀏覽:310
kppm是什麼app 瀏覽:538
python多個數組命名 瀏覽:192
a演算法csdn 瀏覽:24