//带头节点单链表
typedef struct Lnode {
int data;//数据域
struct Lnode* next;//指针域
}Lnode,*LinkList;
//单链表初始化
int initList(LinkList& L)
{
L = new Lnode;
if (L)
{
L->data = 0;
L->next = NULL;
return 0;
}
else
return -1;
}
//判断是否为空表
int isEmpty(LinkList L)
{
if (L->next == NULL)
{
return 0;
}
return -1;
}
//插入元素--任意位置
int insertElem(LinkList &L, int pos, int e)
{
LinkList p = L;
int j = 0;
while (p && j < pos - 1)
{
p = p->next;
j++;
}
if (!p || j > pos - 1)
{
return -1;
}
LinkList s = new Lnode;
s->data = e;
s->next = p->next;
p->next = s;
return 0;
}
//增加元素--头插法
int insertHead(LinkList& L, int e)
{
LinkList p = new Lnode;
p->data = e;
p->next = L->next;
L->next = p;
}
//增加元素--尾插法
int insertTail(LinkList& L,LinkList R,int e)//R是尾指针
{
LinkList p = new Lnode;
p->data = e;
R->next = p;
R = p;
}
//删除元素
int deleteElem(LinkList& L, int pos, int& e)
{
LinkList p = L;
int j = 0;
while (p->next && j < pos - 1)
{
p = p->next;
j++;
}
if (!(p->next) || j > pos - 1)
{
return -1;
}
LinkList q = p->next;
p->next = q->next;
e = q->data;
delete q;
}
//查找--根据下标查找值
int getElem(LinkList L, int pos, int& e)
{
LinkList p = L->next;
int j = 1;
while (p && j < pos)
{
p = p->next;
j++;
}
if (!p || j > pos)
{
return -1;
}
e = p->data;
return 0;
}
//查找--根据元素查找下标返回指针
LinkList locationElem_ptr(LinkList L, int e)
{
LinkList p = L->next;
while (p)
{
if (p->data == e)
{
return p;
}
p = p->next;
}
return NULL;
}
//查找--根据元素查找下标返回下标值
int locationElem_pos(LinkList L, int e)
{
LinkList p = L->next;
int j = 1;
while (p)
{
if (p->data == e)
{
return j;
}
p = p->next;
j++;
}
return -1;
}
//获取链表长度
int lengthL(LinkList L)
{
LinkList p = L->next;
int i = 0;
while (p)
{
i++;
p = p->next;
}
return i;
}
//销毁链表
void destroyL(LinkList& L)
{
LinkList p;
while (L)
{
p = L;
L = L->next;
delete p;
}
}
//清空链表
void clearL(LinkList& L)
{
LinkList p=L->next;
LinkList q;
while (p)
{
q = p->next;
delete p;
p = q;
}
L->next = NULL;
}
线性表--单链表的增删查改
最新推荐文章于 2024-08-18 12:51:45 发布