1、单链表存储结构定义
typedef struct LNode {
Elem Type data; //数据域
struct LNode* next; //指针域
}; LNode, * LinkList; // *LinkLIst为Lnode类型的指针
2、销毁操作
Status DestroyList_L(LinkList& L) {
LinkList p;
while (L)
{
p = L;
L = L->next;
delete p;
}
return 0;
}
3、清空操作
Status ClearList(LinkList& L) {
LinkList p, q;
p = L->next; //指向第一个节点
while (p)
{
q = p->next; //
delete p;
p = q;
}
L - > next = NULL; //头节点指针域为空
return OK;
}
4、求表长
int ListLength_L(LinkList L) {
LinkList p;
p = L -> next;
i = 0;
while (p)
{
i++;
p = p->next;
}
return i;
}
5、判断表是否为空
int ListEmpty(LinkList) {
//若为空表,返回1,否则返回0
if (L->next) //非空
return 0;
else
return 1;
}
6、取值(根据位置获取相应位置数据元素的内容)
Status GetElem_L(LinkList L, int i, ElemType& e) {
p = L->next;
j = 0;
while (p && j < i)//向后扫描,直到p指向第i个元素或p为空
{
p = p->next;
++j;
}
if (!p || j > i)
return error;
e = p->data; //取第i个元素
return OK;
}
7、查找
LNode* LocateElem_L(LinkList L, Elemtype e) {
//返回L中值为e的元素地址,查找失败返回NULL
p = L - next;
while (p && p->data!e)
p = p->next;
return p;
}
8、查找(2)
int LocateELem_L(Linklist L, Elemtype e) {
//返回L中值为e的数据元素的位置序号,查找失败返回0
p = L->next;
j = 1;
while (p && p->data != e)
{
if (p)
return j;
else return 0;
}
}
9、在L中第i个元素之前插入数据元素e
Status ListInsert_L(LinkList& L, int i, ElemType e) {
p = L;
j = 0;
while (p && j < i - 1) {//寻找第i-1个节点
p = p->next;
++j;
}
if (!p || j > i - 1)//i 大于表长+1或者小于1
return ERROR;
s = new LNode; //生成新的节点
s->data = e; //将节点s的数据域置为e
s->next = p -> next;//将s插入L中
p->next = s;
return OK;
}
10、删除线性表中第i个元素
Status ListDelete_L(LinkList& L, int i, Elemtype& e) {
p = L;
j = 0;
while (p->next && j < i - 1)//寻找第i个节点,并令p指向其前驱
{
p = p->next;
++j;
}
if (!p(p->next) || j > i - 1)//删除位置不合理
{
q = p->next;//临时保存被删除节点的地址以备释放
p->next = q->next;//改变删除节点前驱节点的指针域
e = q->data;//保存删除节点的数据域
delete q;//释放删除节点的空间
return OK;
}
}