定义:
typedef struct Node
{
ElemType data;
struct Node *next;
} Node;
typedef Node *LinkList;
读取(获取)第 i 个元素:
/* 初始条件:链表L已存在 */
/* 操作结果:用e返回L中的第 i 个数据元素的值 */
Status 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;
}
在第 i 个位置插入元素:
/* 初始条件:链表L已存在 */
/* 操作结果:在L中的第 i 个位置之前插入新的数据元素e */
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j;
LinkList p,s;
j = 1;
p = *L;
while ( p && j < i )
{
p = p ->next;
++j;
} /* 结束后 p 指向 第 i-1 个结点 */
if ( !p || j > i ) return Error;
s = (LinkList) malloc ( sizeof(Node));
s->next = p->next;
s->data = e;
p->next = s;
return OK;
}
删除第 i 个位置的元素
/* 初始条件:链表 L 已经存在 */
/* 操作结果:删除 L 的第 i 个数据元素,并用 e 返回其值 */
Status ListDelete(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;
j = 1;
p = *L;
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;
}
单链表的整条创建(头插法):
/* 随机产生 n 个元素的值,建立带表头结点的单链线性表 L(头插法) */
void CreateListHead(LinkList *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;
}
}
单链表的整条创建(尾插法):
vod CreateListTail( LinkList *L, int n )
{
LinkList p,r;
int i;
srand( time(0));
*L = (LinkList) malloc( sizeof(Node)); /* 为整个线性表 */
r = *L; /* r 为指向尾部的结点 */
for ( i = 0; i < n; i++)
{
p = (Node *) malloc( sizeof(Node));
p->data = rand() % 100 + 1;
r->next = p;
r = p;
}
r->next = NULL;
}
单链表的整条删除:
/* 初始条件:链表L已经存在 */
/* 操作结果:将 L 重置为空表(只剩头结点) */
Status ClearList( LinkList *L)
{
LinkList p,q;
p = (*L)->next;
while (p) /* 没到表尾 */
{
q = p->next;
free(p);
p = q;
}
L->next = NULL; /* 头结点的指针域为空 */
return OK;
}