#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...