您的位置:首页 > 其它

线性表链式存储(单链表)

2018-02-22 17:04 232 查看
#include<iostream>
#define maxsize 20
#define error 0
#define ok 1
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}node;
typedef struct node *linklist;

//search
elemtype getelem(linklist l, int i, elemtype *e)
{
int j;
linklist p;
p = l->next;
j = 1;
while (p&&j < i)
{
p = p->next;
++j;
}
if (!p || j>i)
return error;
*e = p->data;
return ok;
}
//insert
elemtype listinsert(linklist *l, int i, elemtype e)
{
int j;
linklist p, s;
p = *l; j = 1;
while (p&&j < i)
{
p = p->next;
++j;
}
if (!p || j>i)
return error;
s = new node;
s->data = e;
s->next = p->next;
p->next = s;
return ok;
}

//delete
elemtype listdelete(linklist *l, int i,elemtype *e)
{
int j;
linklist p, q;
p = *l;
j = 1;
while (p->next&&j < i)
{
p = p->next;
++j;
}
if (!(p->next) || j>i)
return error;
q = q->next;
p->next = q->next;
*e = q->data;
return ok;

}

//头插法
void createlisthead(linklist *l, int n)
{
linklist p;
int i;
*l = new node;                     //head
(*l) -> next = NULL;
for (i = 0; i < n; i++)
{
p = new node;
p->next = (*l)->next;
(*l)->next = p;
}
}

//尾插法

void createlisttail(linklist *l, int n)
{
linklist p, r;
int i;
*l = new node;
r = *l;
for (i = 0; i < n; i++)
{
p->next = p;
r = p;
}
r->next = NULL;
}
表中元素在内存中分散存储,所以需要额外增加指针单元来指出下一元素地址,不能随机访问,需要遍历,查找时间O(n)
增删时间O(1)(视情况而定,看是否需要遍历)。相比顺序表好处在于不用大规模修改元素地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: