雙向鍊錶中的每乙個結點都含有兩個指標域,乙個指標域存放其後繼結點的儲存位址,另乙個指標域則存放其前驅結點的儲存位址。
雙向鍊錶結點的型別描述:
//雙向鍊錶的型別描述
typedef int elemtype;
typedef struct nodedulnode,*dulinklist;
其中,prior域存放的是其前驅結點的儲存位址,next域存放的是其後繼結點的儲存位址。
雙向鍊錶有兩個特點:一是可以從兩個方向搜尋某個結點,這使得鍊錶的某些操作(如插入和刪除)變得比較簡單; 二是無論利用前鏈還是後鏈都可以遍歷整個雙向鍊錶。
雙向鍊錶的操作基本和單鏈表的操作相同;
1. 頭插法建立帶頭結點的雙向鍊錶create_dlinklistf(int n)
//頭插法建立帶頭結點的雙向鍊錶
dulinklist create_dlinklistf(int n)
return l;
}2. 尾插法建立帶頭結點的雙向鍊錶create_dlinklistr(int n)
//尾插法建立帶頭結點的雙向鍊錶
dulinklist create_dlinklistr(int n)
return l;
}3. 在指定結點之前插入新結點insert_dlinklistbefore(dulinklist p,elemtype x)
//在指定結點之前插入新結點
void insert_dlinklistbefore(dulinklist p,elemtype x)
}4. 在指定結點之後插入新結點insert_dlinklistafter(dulinklist p,elemtype x)
//在指定結點之後插入新結點
void insert_dlinklistafter(dulinklist p,elemtype x)
else
}5. 刪除指定結點delete_dlinklist(dulinklist p)
//刪除指定結點
void delete_dlinklist(dulinklist p)
free(p);
}6. 後鏈輸出雙向鍊錶print_dlinklistn(dulinklist l)
//後鏈輸出雙向鍊錶
void print_dlinklistn(dulinklist p)
printf("\n");
}7.前鏈輸出雙向鍊錶print_dlinklistp(dulinklist p)
//前鏈輸出雙向鍊錶
void print_dlinklistp(dulinklist p)
printf("\n");
}至於雙向鍊錶的其他操作,如定位,和單鏈表的操作類同,不再贅述。
資料結構 C 實現
之前的2周一直在學資料結構,頭都大了。我是之前對資料結構一點認識都沒有,我是直接看書懟的,我看的是 大話資料結構 前面的講解還不錯,到了樹 圖後,就有點看不懂了,因為直接講的 我想一般人類都不可能看得懂,尤其是kmp演算法那,簡直是天書,我最後還是看別人的部落格才勉強參透,但無論如何,大話資料結構的...
資料結構(C實現) 串
字串 簡稱串 可以將其看作是種特殊的線性表,其特殊性在於線性表的資料元素的型別總是字元性,字串的資料物件約束為字符集。串是由 個或多個字元組成的有限序列。一般記作 s s1 s2 s3 sn 其中,s是串名,用雙引號括起來的字串行稱為串的值,si 1 i n 稱為串的元素,可以是字母,數字或其他字元...
C 實現BitMap資料結構
分治,分布式。bitmap 位圖 及其公升級版bloom filter是處理海量資料常用的方法,這裡先介紹bitmap概念及其c 實現。一 bitmap點陣圖 該資料結構描述了乙個有限定義域內的稠密集合,其中的每乙個元素最多出現一次並且沒有其他任何資料與該元素相關聯。即使這些條件沒有完全滿足 例如,...