資料結構單鏈表的查詢

2021-07-24 08:51:21 字數 1648 閱讀 8447

1.單鏈表的查詢運算

(1)按序號查詢

① 鍊錶不是隨機訪問結構

在鍊錶中,即使知道被訪問結點的序號i,也不能像順序表中那樣直接按序號i訪問結點,而只能從鍊錶的頭指標出發,順鏈域next逐個結點往下搜尋,直至搜尋到第i個結點為止。因此,鍊錶不是隨機訪問結構。

② 查詢的思想方法

計數器j置為0後,掃瞄指標p指標從鍊錶的頭結點開始順著鏈掃瞄。當p掃瞄下乙個結點時,計數器j相應地加1。當j=i時,指標p所指的結點就是要找的第i個結點。而當p指標指為null且j≠i時,則表示找不到第i個結點。

注意:頭結點可看做是第0個結點。

③具體演算法實現

listnode* getnode(linklist head,int i)

if(i==j)

return p;//找到了第i個結點

else return null;//當i<0或i>0時,找不到第i個結點

}

④演算法分析

演算法中,while語句的終止條件是搜尋到表尾或者滿足j≥i,其頻度最多為i,它和被尋找的位置有關。在等概率假設下,平均時間複雜度為:

(2) 按值查詢

①思想方法

從開始結點出發,順著鏈逐個將結點的值和給定值key作比較,若有結點的值與key相等,則返回首次找到的其值為key的結點的儲存位置;否則返回null。

②具體演算法實現

listnode* locatenode (linklist head,datatype key)

③演算法分析

該演算法的執行時間亦與輸入例項中key的取值相關,其平均時間複雜度分析類似於按序號查詢,為o(n)。

附源**

#include

#include

typedef struct node

listnode;

typedef listnode * linklist;

//頭插入法

linklist creatlistf(void)

s->data=ch;

s->next=head;

head=s;//head要不斷向前移動,一直指著最前線,這樣儲存的資料與輸入的資料順序相反

ch=getchar();

}return head;

}//尾插入法

linklist creatlistr(void)

return head;

}//根據查詢第i個結點

listnode * getnodebyi(linklist head,int i)

//迴圈結束後,要不p為null,要不j=i

if(j==i)

else

return null;

}listnode * getnodebykey(linklist head,char key)

return p;//若p=null,則查詢失敗,否則p指向值為key的結點

void print(linklist head)

}int main()

資料結構 單鏈表的查詢

目錄 一 按位查詢 帶頭結點 二 按值查詢 三 求表的長度 四 總結 按位查詢,返回第i個元素 lnode getelem linklist l,int i return p 思路 起初,讓p指向頭結點的指標 然後while迴圈,p依次指向下乙個結點指標,找到第i個結點,並返回 封裝的好處 避免重複...

資料結構單鏈表

初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!2012年3月30日 於大連 include using namespace std typedef struct node linklist,node linklist makelist int n void ...

資料結構 單鏈表

今天浪費了好多時間,也許是心裡想著明天的考試吧 可自己也知道這次的考試,自己畢竟過不了了,只好等到今年11月份,想想那時自己已經大三了 還有那麼多時間嗎!很懊惱今天不知怎麼回事,感嘆環境真的可以影響乙個人,真的可以 把今天的學習筆記寫下來,沒有進行好好的整理,這回單鏈表的功能較多,操作比較散,最後乙...