資料結構課堂習題解

2022-09-28 10:03:03 字數 1788 閱讀 9186

課堂習題參考解答

圖部分1. 以鄰接表為儲存結構,寫出圖的深度優先遍歷的非遞迴演算法。

答:補充圖的鄰接表儲存結構

void dfs(algraph g,vertexttype v)

if(top>0)

}}單鏈表部分

1.請寫乙個演算法將線性表(a1,a2,…,an)逆置為(an,an-1,….,a1)

typedef struct node

node,*linklist;

void invert(linklist head)

}2.在乙個遞增有序的線性表中,有數值相同的元素存在。若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不可再有重複元素。

typedef struct node

node,*linklist;

void delsame(linklist la)

else

pre->next=p;

}3.設head是帶頭結點的頭指標,試寫出演算法,按遞增次序輸出單鏈表中各結點的資料元素,並釋放結點所占用的空間。要求不允許使用陣列作為輔助空間。

typedef struct node

node,*linklist;

void minidelte(linklist head)

else

p=p->next;

printf(pre->next->data);

u=pre->next;

pre->next=u->next;

free(u);

}free(head);

}棧和佇列

1.請利用兩個棧s1和s2來模擬乙個佇列。已知棧的三種操作定義如下:

push(st,x),元素x入棧;pop(st,x),st棧定元素出棧並賦給變數x;sempty(st),判斷st是否為空。那麼利用棧的操作來實現該佇列的三個操作:enqueue,插入乙個元素入隊;dequeue,刪除乙個元素出隊;queueempty,判斷隊列為空。

解:寫出佇列和棧的儲存結構。(注:假定棧s1作入隊,棧s2作出隊)

(1)入隊

int enqueue(seqstack *s1,elemtype x,seqstack *s2)

if(sempty(s2))

while(!sempty(s1))

push(s1,x);

}return 1;

}(2)出隊

void dequeue(seqstack *s2,seqstack *s1,elemtype *x)

else

if(sempty(s1))

else

while(!empty(s1))

pop(s1,x);

push(s2,*x);

pop(s2,x);

printf("出隊元素為",x);}}

(3)判隊空

int queueempty(seqstack s1,seqstack s2)

2.假設以帶頭結點的迴圈鍊錶表示佇列,並且只設乙個指標指向隊尾結點,但不設頭指標,請寫出相應的入隊和出隊演算法。

解:(1)入隊

void enqueue(linklist rear,elemtype x)

(2)出隊

void dequeue(linklist rear)

s=rear->next->next;

rear->next->next=s->next;

printf("出隊元素為:",s->data);

if(s==rear)

rear=rear->next;

free(s);}

資料結構習題解析

1.演算法的時間複雜度取決於 c a 問題的規模 b 待處理資料的初態 c a和b 2.計算機演算法指的是解決問題的步驟序列,它必須具備 b 這三個特性。a 可執行性 可移植性 可擴充性b 可執行性 確定性 有窮性c 確定性 有窮性 穩定性d 易讀性 穩定性 安全性 5 從邏輯上可以把資料結構分為 ...

複習資料結構習題解答

1 空格串是由空格組成的串,空串是不含任何字元的串,因此空格串和空串不是乙個概念。2 從整體上看,資料在儲存器內有兩種存放的方式 一是集中存放在乙個連續的記憶體儲存區中 一是利用儲存器中的零星區域,分散地存放在記憶體的各個地方。3 如果一棵滿二叉樹的深度為6,那麼它共有 63 個結點,有 32 個葉...

資料結構習題

第5章陣列和廣義表 一 選擇題 1.在以下講述中,正確的是 b a 線性表的線性儲存結構優於鍊錶儲存結構 b 二維陣列是其資料元素為線性表的線性表 c 棧的操作方式是先進先出 d 佇列的操作方式是先進後出 2.若採用三元組壓縮技術儲存稀疏矩陣,只要把每個元素的行下標和列下標互換,就完成了對該矩陣的轉...