1. 在乙個遞增的順序表中插入乙個元素,並保持有序.
分析: 判斷順序表是否滿, 滿了則追加空間. 從表中的最後乙個元素開始,尋找插入位置,找到則插入,表長增一
int listinsert_sq(sqlist *l, int ele)
for(k=l->length-1;k>=0&&l->slist[k]>e;k--)
l->slist[k+1] =e;
l->length++;
return ok;
}
2. 給乙個帶頭節點的單鏈表,利用原有節點將單鏈表逆置
分析: 將原鍊錶斷開成兩個部分, 第一部分包含頭節點,第二部分包含剩餘節點,迴圈,將第二部分的每個節點逐個插入
第一部分頭節點的後面;
void invert(linklist h)
}
3. 將兩個有序表合併. 設有兩個遞增排列的有序表,和並後, 仍遞增有序.
分析: 可以通過依次取出兩個表中的第乙個元素進行比較,從中得到值較小的元素,放入結果有序表中的第乙個位置;
然後將上次比較大的元素與另乙個表的第二個元素繼續比較,得到值較小的元素,放入結果有序表中的第二個位置
... 以此類推,將兩個表中的所有元素逐個放入結果有序表位置.
//順序表
int merge(sqlist *a,sqlist *b, sqlist *c)
while(i < a->length &&j length)
else
} while(ilength)
while(jlength)
c->length=k;
return ok;
}//hc鍊錶,不帶頭節點
lnode * merge(lnode *ha, lnode *hb)
else if(p->data>q->data)
if(p->data==q->data)
r = hc-> next;
while(p&&q)
else if(p->data>q->data)else if(p->data==q->data)
}if(p) r->next=p;
if(q) r->next=q;
return hc;
}
線性表演算法題庫 線性表習題
鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...
演算法例項線性表和非線性表
題目 匹配一段字元如aacd 匹配到aacdaacereggaac沒有匹配 可以使用也就是傻乎乎的乙個個去匹配 沒錯就是我 使用kmp演算法匹配次數會大大下降 暴力匹配法 public class kpmdemo public static int baoli string str1,string ...
線性表演算法實現
1.設有兩個無頭結點的單鏈表,頭指標分別為ha.hb.鏈中有資料域data鏈域next,兩鍊錶的資料都按遞增序存放,現要求將hb表歸到ha表中且歸併後ha仍遞增序,歸併中ha表中已有的資料若hb中也有則hb中的資料不歸併到ha中要求不申請額外的儲存空間來完成。merge hahb linklist....