单链表操作
一、定义单链表存储结构
typedef struct Node
{
ElemyType data;
struct Node *next;
}Node,*Linklist;
二、创建单链表
1、头插法
void CreatListHead(Linklist *L,int n)
{
Linklist p;
int i,k;
*L = (Linklist)malloc(sizeof(Node));
(*L)->next = NULL;
for (i=0; i<n; i++)
{
p = (Linklist)malloc(sizeof(Node));
scanf("%d",&k);
p->data = k;
p->next = (*L)->next;
(*L)->next = p;
}
}
2、尾插法
void CreatListTail(Linklist *L,int n)
{
Linklist p,r;
int i,k;
*L = (Linklist)malloc(sizeof(Node));
r = *L;
for (i=0; i<n; i++)
{
p = (Linklist)malloc(sizeof(Node));
printf("输入:");
scanf("%d",&k);
p->data = k;
r->next = p;
r = p;
}
r->next = NULL;
}
三、单链表的读取
Status GetElem(Linklist L,int i)
{
Linklist p;
int j;
p = L->next;
j = 1;
while ( p && j<i )
{
p = p->next;
j++;
}
if ( !p || j>i)
return ERROR;
printf("%d\n",p->data);
return OK;
}
四、单链表的遍历
void Traversal(Linklist L)
{
Linklist p;
p = L->next;
while ( p )
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
五、单链表的插入
Status ListInsert(Linklist *L,int i,ElemyType 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 = (Linklist)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
六、单链表的删除
Status ListDelete(Linklist *L,int i,ElemyType *e)
{
int j;
Linklist p,q;
p = *L;
j = 1;
while ( p && j<i )
{
p = p->next;
j++;
}
if ( !p || j>i)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
七、单链表的整表删除
Status ClearList(Linklist *L)
{
Linklist p,q;
p = (*L)->next;
while ( p )
{
q = p->next;
free(q);
p = q;
}
(*L)->next = NULL;
return OK;
}