1.单链表的定义
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
2.头插法建立单链表
LinkList List_HeadInsert(LinkList &L)
{
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
3.尾插法建立单链表
LinkList List_TailInsert(LinkList &L)
{
int x;
L=(LinkList)malloc(sizeof(LNode))
LNode *s,*r=L;
scanf("%d",&x);
while(x!=999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
4.按序查找单链表的结点值
LNode *GetElem(LinkList L,int i)
{
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i)
{
p=p->next;
j++;
}
return p;
}
5.按值查找单链表的结点值
LNode *LocateElem(LinkList L,ElemType e)
{
LNOde *p=L->next;
while(p!=NULL&&p->data!=e)
p=p->next;
return p;
}
6.插入到第i个位置
p=GetElem(L,i-1);
s->next=p->next;
p->next=s;
7.对某结点进行前插操作
s->next=p->next;
p->next=s;
temp=p->data;
p->data=s->data;
s->data=temp;
8.删除第i个结点
p=GetElem(L,i-1);
q=p->next;
p->next=q->next;
free(q);
9.删除结点*p
q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);