线性表链式存储结结构
简单介绍一些链表的功能
结构定义
typedef int ElemType;
typedef int Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
查找操作
Status GetElem(LinkList L,int i,ElemType *e)
{
int j=1;
LinkList p;
p=L;
while(p && j<i)
{
p=p->next;
j++;
}
if( !p || j>i )
return ERROR;
*e=p->data;
return OK;
}
插入操作
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j=1;
LinkList p,s;
p=*L;
while( p && j<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;
}
删除操作
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j=1;
LinkList p,q;
p=*L;
while( p && i>j )
{
p=p->next;
j++;
}
if( p||j>i )
return ERROR;
*e=p->data;
q=p->next;
p->next=q->next;
free(q);
return Ok;
}
整表删除操作
Status ClearList(LinkList *L)
{
LinkList p,q;
p=(*L)->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
return OK;
}
优点和缺点 讨论
- 优点
不受空间大小 根据所存数据改变
插入删除数据不用整体移动 依靠指针改变连接 - 缺点
查找操作需要耗费大量时间