單鏈表的基本操作有:
單鏈表的銷毀,清空單鏈表,求單鏈表表長,判斷鍊錶是否為空,取值,查詢,插入,刪除,單鏈表的建立
1.單鏈表的定義:
typedef struct lnodelnode, *linklist;
定義鍊錶linklist l;
定義結點指標lnode *p或者linklist p;
2.用鏈式儲存結構儲存學生學號、姓名、成績的方式:
第一種方式:
typedef struct studentlnode, *linklist;
第二種方式:
typedef structelemtype;
typedef struct lnodelnode, *linklist;
3.單鏈表的初始化
步驟:1.生成新節點做頭節點,用頭指標l指向頭節點。
2.將頭結點的指標域置空。
status initlist_l(linklist &l)
4.判斷鍊錶是否為空
int listempty(linklist l)
5.單鏈表的銷毀
(結束條件:l==null 迴圈條件l!=null或l)
status destroylist_l(linklist &l)
return ok;
}
6.清空鍊錶
鍊錶存在,但是沒有元素
反覆執行
p=q; q=q->next;
結束條件:p==null 迴圈條件:p!=null
status clearlist(linklist &l)
l->next = null;//頭節點指標域為空
return ok;
}
7.求鍊錶的表長
int listlength_l(linklist l)//返回l中資料元素的個數
return i;
}
8.取值--取單鏈表第i個元素的內容
status getelem_l(linklist l, int i, elemtype &e)
if(!p||j>i) return error;
e=p->data;
return ok;
}
9.查詢
時間效率o(n)
①按值查詢(返回位址)
lnode *locateelem_l(linklist l, elemtype e)
②按值查詢(返回序號)
lnode *locateelem_l(linklist l, elemtype e)
return j;
}
10.插入元素
時間複雜度一般為o(1),但是實際操作中,要先查找到相應元素,所以時間複雜度為o(n)
status listinsert_l(linklist &l, int i, elemtype e)
if(!p||j>i-1)return error;
s = new lnode;
s -> data = e;
s -> next = p -> next;
p -> next = s;
return ok;
}
11.刪除結點
時間複雜度與插入相同。
status listdelete_l(linklist &l, int i, elemtype &e)
if(p->next||j>i-1)return error;
q = p->next;
p->next = q->next;
e = q->data;
delete q;
return ok;
}
12.單鏈表的建立
①頭插法
時間複雜度為o(n)
先插入最後乙個元素,最後插入第乙個元素。
void createlist_h(linklist &l, int n)
}
②尾插法
通過尾指標操作
時間複雜度為o(n)
void createlist_r(linklist &l,int n)
}
單鏈表操作
include include typedef struct node tag node 建立不帶頭結點的單鏈表 node createnode else p q scanf d n 函式體結束,q指標變數被釋放,不能通過head引數帶回到呼叫函式 要把head帶回到呼叫函式,要把它定義為指向指標的...
單鏈表操作
include stdio.h include malloc.h include define n 10 代表要處理的元素個數 可以誰使用者的意思修改 define ok 1 define overflow 0 typedef int elemtype typedef int status type...
單鏈表操作
這一次補上鍊表的注釋,是空閒的時候敲出來的,如果有錯,希望幫忙糾正 部分給出了詳細說明,這裡只選取了基本操作,因為更複雜的鍊錶操作太繁瑣,這裡就不寫了 如果有什麼不懂的地方,可以隨時詢問 include using namespace std typedef int elemtype struct ...