1、試編寫算法:將兩個有序順序表歸并成一個有序順序表
//c是假設已經建好的長度足夠大的線性表
void mergeArry(int a[],int m,int b[],int n){ //歸并兩個線性表
int i = 0 , j = 0 ;
int k = 0 ;
//第一個循環(huán)執(zhí)行完畢缀旁,至少有一惡搞線性表的值已經歸并好了,好需要將另一個線性表剩下的值存到新的線性表
while (i<m && j < n){
if(a[i]<b[j]){
c[k] = a[i];
k++;
i++;
}else{
c[k] = b[i];
k++;
i++;
}
}
//假如是a還剩值沒存完
while(i < m ){
c[k] = a[i];
k ++ ;
i ++ ;
}
while(j < n ){
c[k] = b[j];
k++;
j++;
}_
}
2觅丰、試編寫算法:將兩個帶頭結點的單鏈表按data域從小到大的順序進行鏈接
Node * merge(Node * h1, Node * h2) {
if (h1 == NULL) return h2;
if (h2 == NULL) return h1;
Node * head;
if (h1->data>h2->data) {
head = h2; h2=h2->next;
} else {
head = h1; h1=h1->next;
}
Node * current = head;
while (h1 != NULL && h2 != NULL) {
if (h1 == NULL || (h2!=NULL && h1->data>h2->data)) {
current->next = h2; h2=h2->next; current = current->next;
} else {
current->next = h1; h1=h1->next; current = current->next;
}
}
current->next = NULL;
return head;
}
3、設采用二叉鏈表存儲二叉樹钝域,每個節(jié)點含有4個域讽坏,分別為lchild,data,rchild,bal.其中l(wèi)child指向左孩子,data存放數據例证,rchild指向右孩子路呜,bal存儲相應結點的平衡因子,bal=左子樹高度-右子樹高度织咧,試編寫算法胀葱,求二叉樹中每個節(jié)點的平衡因子,并存入相應結點的bal域中笙蒙。
4抵屿、已知A為無序線性表,采用順序存儲結構捅位。請設計算法轧葛,刪除其中所有的負數(注意負數可能有多個)
// 傳入線性表搂抒,因為要刪除這個表改變他的值,所以用引用型
void delet(int &list[] , int n ){
int listTemp[n];//定義一個大小和list相同的線性表
int k = 0
for(int i = 0 ; i < n ; i ++) {
if(list[i] > 0 || list[i] == 0){
listTemp[k] = list[i] ;
}
}
list = listTemp;
}
5、已知字符串s采用單向鏈表結構尿扯,結點的數據域為字符型求晶。模式串t采用順序存儲結構。請設計模式匹配算法衷笋,在s中查找t的起始地址芳杏。
6、已知二叉樹的數據域為整數類型,其中只有一個結點的數據值最大右莱。請設計算法蚜锨,查找該結點的地址。
//遍歷二叉樹找到最大值
//傳入用來遍歷的結點p ,和用來得出最大值的結點max, maxKey為第一個結點的值
void r(BTNode* p , &BTNode* max , int maxKey){
if(p != NULL){
r(p-> lChild);
r(p-> rChild);
if(maxKey < p -> data){
max = p
}
}
}
7慢蜓、請簡述堆排序的算法思想亚再,并給出對于下列關鍵字序列進行堆排序的過程{21,25,49,25,16,8}
8、試編寫算法晨抡,從一個有序表中刪除其值在給定值s和t(要求s小于t)之間的所有元素
void delet(int &list[] , int n ){
int listTemp[n];//定義一個大小和list相同的線性表
int k = 0
for(int i = 0 ; i < n ; i ++) {
if(list[i] > 0 || list[i] == 0){
listTemp[k] = list[i] ;
}
}
list = listTemp;
}
9氛悬、假定二叉樹采用二叉鏈表存儲結構,設計一個算法耘柱,在二叉樹中查找關鍵值為key的結點的父結點
void r(BTNode* p , int key){
if(p != NULL){
r(p-> lChild);
r(p-> rChild);
if(key < p -> key){
return p
}
}
}