資料結構 單鏈表演算法及完整操作

2021-10-06 10:11:38 字數 3652 閱讀 2408

#include

#include

#include

#include

#include

#define status int

#define elemtype int

using namespace std;

typedef

struct lnode

lnode,

*linklist;

/*****************基本操作函式**************/

//1.初始化鍊錶——構造乙個空表

//演算法步驟:

// 1.生成新結點做頭結點,用頭指標l指向頭結點

// 2.將頭結點的指標域置空

status initlist

(linklist &l)

//2.判斷鍊錶是否為空

//空表的定義:鍊錶中無元素(頭指標和頭結點仍然存在)

//演算法思路:判斷頭結點指標域是否為空

intlistempty

(linklist l)

//空表返回1,非空返回0

//3.銷毀單鏈表

//演算法思路:從頭指標開始,依次釋放所有結點

status destroylist

(linklist &l)

return1;

}//4. 清空鍊錶

//定義:鍊錶仍然存在,但鍊錶中無元素,成為空鍊錶

//演算法思路:依次釋放所有結點,並將頭指標指標域置空

status clearlist

(linklist &l)

l->next =

null

;//頭結點指標域置空

return1;

}//5.獲取單鏈表長度

//演算法思路:從首元結點開始,依次計數所有結點

intlistlength

(linklist l)

return i;

}//6. 取第i個元素的值

//演算法步驟:

// 1.從第1個結點(l->next)順序掃瞄,用指標p指向當前掃瞄到的結點p的初值為p=l->next.

// 2.j做計數器,累計當前掃瞄過的節點數,j的初值為1

// 3.當p指向掃瞄到的下一結點時,計數器j加1

// 4.當j==i時,p所指向的結點就是要找的第i個結點

status getelem

(linklist l,

int i, elemtype &e)if(

!p || j>i)

//第i個元素不存在

return0;

e = p->data;

return1;

}//6.查詢

//演算法步驟:

// 1.從第乙個結點起,依次和e相比較

// 2.如果找到乙個其值與e相等的資料元素,則返回其在鍊錶中的位置或位址

// 3.如果查遍整個鍊錶都沒有和e相等的元素,則返回0或者null

////6-1.查詢——返回位址

lnode *

locateelem

(linklist l, elemtype e)

return p;

}//6-2.查詢——返回位置序號

//int locateelem(linklist l, elemtype e)

//// if (p)

// return j;

// else

// return 0;

//}

//7.插入結點

//演算法步驟:

// 1.首先找到ai-1的儲存位置p

// 2.生成乙個資料域為e的新節點s

// 3.插入新節點:1.新節點的指標域指向ai(s->next = p->next)

// 2.結點ai-1的指標域指向新節點

status listinsert

(linklist &l,

int i, elemtype e)if(

!p || j > i-1)

//i大於表長+1或者小於1,位置非法

return0;

s = new lnode;

//生成結點s

s->data = e;

s->next = p->next;

//將s插入鍊錶中

p->next = s;

return1;

}//8.刪除第i個結點

//演算法步驟:

// 1.首先找到ai-1的儲存位置p,儲存要刪除的a的值

// 2.令p->next指向ai+1

status listdelete

(linklist &l,

int i, elemtype &e)if(

!(p->next)

|| j > i-1)

//刪除位置不合理

return0;

q = p->next;

//臨時儲存被刪結點的位址以備釋放

p->next = q->next;

//改變被刪結點前驅結點指標域

e = q->data;

//儲存被刪結點資料域

delete q;

//釋放結點空間

return1;

}//9.頭插法建立鍊錶

//演算法步驟:

// 1.從乙個空表開始,重複讀入資料

// 2.生成新節點,將讀入資料存放到新結點資料域中

// 3.從最後乙個結點開始,依次將各結點插入鍊錶前端

void

creatlist_l

(linklist &l,

int n)

}//10.尾插法建立鍊錶

//演算法步驟:

// 1.從乙個空表l開始,將新結點逐個插入到鍊錶的尾部,尾指標r指向鍊錶的尾結點

// 2.初始時,r和l同時指向頭結點,每讀入乙個資料新生成乙個結點

// 將新結點插到尾結點後,r指向新結點

void

creatlist_r

(linklist &l,

int n)

}/*****************功能函式**************/

//遍歷輸出函式

void

printlist

(linklist l)

printf

("\n");

}else

}//建立鍊錶函式

void

create

(linklist &l)

else

}//插入功能函式,呼叫listinsert函式

void

insert

(linklist &l)

}//刪除功能函式 呼叫listdelete刪除

void

delete

(linklist l)

}//查詢函式

void

search

(linklist l)

else

printf

("未找到該元素!\n");

}void

menu()

intmain()

}return0;

}

資料結構 順序表演算法及完整操作

include include include include include using namespace std define list init size 100 線性表儲存空間初始分配量 define listincrement 10 線性表儲存空間的分配增量 define ok 1 de...

Java資料結構與演算法之單鏈表及簡單操作

單鏈表 鍊錶是一系列儲存資料元素的單元通過指標串連線形成的。單鏈表的儲存單元有兩個域,乙個是資料域,乙個是指標域,這個包含資料域和指標域的儲存單元叫做節點。資料域 data 結點的資料域 data 可以使用乙個 object 型別的物件來實現,用於儲存任 何型別的資料元素,並通過物件的引用指向該元素...

C資料結構 單鏈表操作

單鏈表的一些操作函式 參考自 程杰 大話資料結構 巨集定義 define ok 1 define error 0 typedef int elemtype typedef int status 結構體 線性單鏈表儲存結構 typedef struct node node typedef struct...