掌握單鏈表很容易,把下面的**弄懂,敲幾遍,全部記住,而且記清每乙個細節。
首先,在list.h中宣告單鏈表的adt.我們把我們所需要的自定義型別啊,函式啊,都宣告出來,但這裡我們只是宣告他們,而具體實現則是在list.c中進行。
/**
* @file list.h
* @brief 單鏈表的宣告
* @details
* @author [email protected]
* @date 2014-5-19
*/#ifndef _list_h
//先宣告實現單鏈表時所需的型別和結構,包括乙個節點結構體,元素型別,指向元素的指標型別(同樣可以用來表示單鏈表本身和元素位置)
struct node;
typedef int elementtype; //此處根據鍊錶中元素型別的不同 可以修改
typedef struct node *ptrtonode;
typedef ptrtonode list;
typedef ptrtonode position;
//接下來宣告一些常用的函式,一定要記住這些函式,因為這些函式都是最常用最基礎的
list makeempty(list l); //置空鍊錶
int isempty(list l); //判空鍊錶
int islast(position p,list l); //判斷是否為表尾
position find(elementtype x,list l); //找出元素所在位置
void delete(elementtype x,list l); //刪除元素
position findprevious(elementtype x,list l); //找到某元素的前驅
void insert(elementtype x,list l,position p); //插入乙個元素
void deletelist(list l); //刪除鍊錶
position header(list l); //返回頭結點
position first(list l); //返回第乙個元素
position advance(position p); //返回後乙個位置
elementtype retrieve(position p); //獲取位置p處的元素值
#endif // _list_h
宣告完了以後,我們就要逐步實現這些單鏈表的adt,實現的**放在list.c中
具體實現**如下:
/**
* @file list.h
* @brief 鍊錶的實現部分
* @details
* @author [email protected]
* @date 2014-5-19
*/#include #include #include //別忘了先把宣告部分的標頭檔案list.h包含進來
//實現節點結構體
struct node
;//空鍊錶返回true
int isempty(list l)
//當前位置是否為鍊錶末尾
int islast(position p, list l)
//找到乙個元素所在的位置
position find(elementtype x, list l)
//找到某個元素的前驅
position findprevious(elementtype x, list l)
//刪除某個元素x
void delete(elementtype x, list l)
}//列印錯誤資訊
void fatalerror(char *str)
//在某個元素前插入乙個元素
void insert(elementtype x, list l, position p)
//刪除乙個鍊錶
void deletelist(list l)
}
至此,我們已經基本實現乙個單鏈表和其基礎的操作。這裡有幾個例程並沒有實現,不要著急,這裡的單鏈表還不能供我們使用,有幾個歷程和後面我們實現棧和佇列時大同小異,等學完棧和佇列,我們再回來把剩下的幾個例程補上,然後也像測試棧和佇列一樣,在主程式中來測試一下單鏈表。
資料結構與演算法分析 用C語言實現佇列(陣列方式)
佇列先進先出,涉及到兩個位置的操作,乙個是隊首,乙個是隊尾,我們分別用兩個整型變數來表示隊首和隊尾,另外需要注意的是我們實現佇列時要借助迴圈陣列,具體在 中已經很清楚了。實現過程中的技巧與用陣列實現棧時大多數一樣。首先,我們來宣告型別,結構和例程。file queue.h brief 用鍊錶實現佇列...
資料結構與演算法(六)查詢 c語言實現
靜態查詢表 include include include define max 20 typedef struct elemtype typedef struct stable stable initlist int n for int i 0 i n i st length n return s...
資料結構 查詢演算法 用c語言實現查詢演算法《一》)
一 查詢的分類 1 靜態查詢 不進行插入和刪除操作。2 動態查詢 可進行插入和刪除操作。按查詢的基本方法可分為 比較查詢法和計算查詢法。按元素的組織結構可分為 基於線性表的查詢和基於樹的查詢。二 順序查詢 基於線性表 1 陣列順序儲存 靜態 比較查詢 include define list size...