二:鏈表
1、知識點
●邏輯次序與物理次序不一致存儲方法;
●單鏈表的定義:術語(頭結點、頭指針等)
●注意帶頭結點的單鏈表與不帶頭結點的單鏈表區別。(程序員考試一般不考帶頭結點,因為稍難理解)
●插入、刪除、遍歷(p==NULL表明操作完成)等操作
● 循環鏈表:定義,存儲表示,操作;
● 雙向鏈表:定義,存儲方法,操作;
單鏈表和循環鏈表區別在最后一個指針域值不同。
2、操作
●單鏈表:插入X,刪除X,查找X,計算結點個數
●單鏈表的逆置(中程曾考)
head->NULL/p->a1/p->a2/p->a3/p……an/NULL 注:p代表指針;NULL/p代表頭結點
=》 head->NULL/p->an/p->an-1/p->an-2/p……a1/NULL
●循環鏈表的操作:插入X,刪除X,查找X,計算結點個數;
用p=head->next來判斷一次計算結點個數完成;
程序段如下:
k=0;
do{
k++;
p=p->next;
}while(p!=head->next);
● 雙向鏈表
●多項式相加
● 有序鏈表合并
例程:已知兩個字符串S,T,求S和T的最長公子串;
1、邏輯結構:字符串
2、存儲結構:數組
3、算法: 精化(精細化工)**老頑童注:此處“精細化工”說明好像不對!
s="abaabcacb"
t="abdcabcaabcda"
當循環到s.len-1時,有兩種情況:s="abaabcacb"、s="abaabcacb"
s.len-2時,有三種情況:s="abaabcacb"、s="abaabcacb"、s="abaabcacb"
.
.
.
1 s.len種情況
程序思路:
tag=0 //沒有找到
for(l=s.len;l>0&&!tag;l--) {
判斷長度為l的s中的子串是否為t的子串;
若是:tag=1;
}
長度為l的s的子串在s中有(s.len-l+1)個。
子串0: 0~l-1
1: 1~l
2: 2~l+1
3: 3~l+2
……
……
s.len-l: s.len-l~s.len-1
由上面可得:第j個子串為j~l+j-1。
判斷長度為l的s中的子串是否為t的子串:
for(j=0;j<s.len-l+1&&!tag;j++){
判斷s中長度為l的第j個子串是否為t的子串;
如果是:tag=1;
}
模式結構:
tag=0;
for(l=s.len;l>0&&tag==0;l--) {
for(j=0;j<s.len-l+1&&!tag;j++) {
?? 用模式匹配方法確定s[j]~s[l+j-1]這個字符串是否為t的子串; //好好想想
若是,tag=1;
}
}
上一頁 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一頁
轉帖于:軟件水平考試_考試吧- 推薦給朋友
- 收藏此頁
·網絡工程師資料:網絡體系結構-軟考網絡類題解 (2008-4-25 14:33:38)
·計算機網絡基礎網絡拓撲結構及優缺點分析 (2008-2-22 14:04:32)
·網絡工程師必知:靜態路由協議配置方法 (2008-2-22 14:03:39)
·計算機網絡尼奎斯特 香農公式例題解析 (2008-2-22 14:02:35)
·軟考復習:因特網IP的分類、尋址規則及子網掩碼 (2008-2-22 13:57:21)