0)单链表插入:
单链表插入的时间复杂度:
从头查找到插入点:O(n)
执行插入操作:O(1)
单链表删除
Status 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 = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
单链表插入:
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j;
LinkList p, s;
p = *L;
j = 1;
while( p && j<i ) // 用于寻找第i个结点
{
p = p->next;
j++;
}
if( !p || j>i )
{
return ERROR;
}
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
顺序链表:
找到插入点:O(1)
执行插入操作时元素依次后移:O(n)
若是插入连续10个元素
顺序表每次都是O(n)
链表第一次:O(n)之后每次都是O(1)
1)单链表整表删除
status ClearList(LinkList *L)
{
LinkList p,q;
p = (*L)->next;
while(p)
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
时间性能:
---查找:
顺序存储结构O(1)
单链表O(1)
---插入和删除
顺序存储结构需要平均移动表厂一般的元素,时间为O(n)
单链表在计算出某位置的指针后,插入和删除时间仅为O(1)
---空间性能:
顺序存储结构需要预分配存储空间,分大了,造成空间浪费,分小了,容易发生一出
单链表不需要分配存储空间,只要有就可以分配,元素个数也不瘦限制
2)单链表整表创建
0)头插法建立链表:
void CreateListHead(LiskList *L,int n)
{
LinkList p;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = Null;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data = rand()%100+1;
p->next = (*L)->next;
(*L)->next = p;
}
}
1)尾插法建立链表:
void CreateListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0));
*L = ()malloc(sizeof(Node));
r = *L;
for(i=0;i<n;i++)
{
p=(Node*)malloc(sizeof(Node));
p->data = rand()%100+1;
r->next = p;
r = p;
}
r->next = null;
}