第
5章棧和佇列
棧和佇列是兩種面向表的資料結構
5.1棧、棧的實現以及
stack
類棧的標準模型是自助餐廳的盤子堆
5.1.1
棧的操作
5.1.2
stack
類的實現
class
cstack
public
int count
} public
void push(object item)
public
object pop()
public
void clear()
public
object peek
} }
下面就用這段**來編寫乙個用棧解決問題的程式。
判斷是否是回文
static
void main(string args)
pos++; }
if (ispalindrome)
console.writeline(word + "is a palindrome.");
else
console.writeline(word + "is not a palindrome.");
console.read(); }
5.2 stack
類stack
類是icollection介面的乙個實現,它代表了乙個lifo群集或乙個棧。
5.2.1
stack
構造器方法
這裡有三種方法來例項化乙個棧的物件
stack mystack = new stack();
第二種構造方法允許建立乙個來自另乙個群集物件的棧物件。例如,可以把構造器作為陣列進行傳遞,並且用來自現有陣列的元素構建成棧:
string names = new string;
stack namestack = new stack(names);
執行pop方法會首先把「mike」從棧中移除。
stack mystack = new stack
(25)
5.2.2
主要的棧操作
用棧來計算簡單的算術表示式
class
class1
static
bool isnumeric(string input)
return flag; }
static
void calculate(stack n, stack o, string exp)
} else
if (ch == "+" || ch == "-" || ch == "*" || ch == "/")
o.push(ch);
if (n.count == 2)
compute(n, o); }
}static
void compute(stack n, stack o)
} }
5.2.3
peek
方法5.2.4
clear
方法5.2.5
contains
方法5.2.6
copyto
方法和toarray方法
copyto
方法會把棧內的內容複製到乙個陣列中。陣列必須是object型別,因為這是所有棧物件的資料型別
stack mystack = new
stack();
for (int i = 20; i > 0; i--)
object myarray = new
object[mystack.count];
mystack.copyto(myarray, 0);
for (int i = 0; i < 20; i++)
toarray
方法:myarray = mystack.toarray();
5.2.7
stack
類的例項:十進位制向多種進製的轉換
static
void main(string args)
static
void mulbase(int n, int b)
while (n != 0);
while (digits.count > 0)
} 5.3
佇列、queue
類以及queue
類的實現
5.3.2
queue
類的實現
class
cqueue
public
void enqueue(object item)
public
void dequeue()
public
object peek()
public
void clearqueue()
public
int count()
} 5.3.4
用佇列排序資料
class
class1;
static
void displayarray(int n)
} static
void rsort(queue que, int n, digittype digit)
} static
void buildarray(queue que, int n)
} }
static
void main(string args) ;
for (int i = 0; i < 10; i++)
numqueue[i] = new
queue();
rsort(numqueue, nums, digittype.ones);
buildarray(numqueue, nums);
console.writeline();
console.writeline("first pass results");
displayarray(nums);
rsort(numqueue, nums, digittype.tens);
buildarray(numqueue, nums);
console.writeline();
console.writeline("second pass results");
displayarray(nums);
console.writeline(); }
}5.3.5
源自queue類的優先佇列
許多應用程式在操作中都利用到了優先佇列,乙個很好的例項就是在計算機作業系統內的程序處理。優先順序為0的程序比優先順序為20的任務具有更高的優先性。
資料結構(第五章)
樹下 第一講一.堆 什麼是堆?在講堆之前,我們先看看什麼是優先佇列。優先佇列 是一種特殊的佇列,從名稱上看,優先,顧名思義,取出的元素是按照一定的優先順序出隊的,而不是元素進入佇列的先後順序。優先佇列的完全二叉樹表示 堆的兩個特性 結構性 用陣列表示的完全二叉樹。有序性 任一結點的關鍵字是其子樹所有...
資料結構筆記 第五章
一.樹的邏輯結構 樹是乙個有限的集合,集合中的元素稱為結點。1 結點的個數為0 稱為空樹。2 結點的個數為1 此節點稱為根節點。3 節點的個數大於1 則除了根結點以外的結點又可分為多個集合,每乙個集合本身其實質上也是一棵樹,並且是根節點的子樹。二.二叉樹的邏輯結構 1 二叉樹的定義 二叉樹首先必須是...
資料結構筆記 第五章
雙親表示法 基本思想 用一維陣列來儲存樹的各個結點 一般 按層序儲存 陣列中的乙個元素對應樹中的乙個 結點,包括結點的資料資訊以及該結點的雙親在數 組中的下標 森林轉換為二叉樹 將森林中的每棵樹轉換成二叉樹 從第二棵二叉樹開始,依次把後一棵二叉樹的根 結點作為前一棵二叉樹根結點的右孩子,當所有二 叉...