1.双向链表
- //双向链表类C描述
typedef struct node
{
datatype data;//数值域
struct node *pri,*next;//指针域
}node,*linklist;
- //双向链表插入,在p结点之前插入新结点s
void Insert(linklist s,datatype e)
{
linklist p;
s=(linklist)malloc(sizeof(node));
s->data=e;
s->next=p;
s->pri=p->pri;
p->pri->next=s;
p->pri=s;
}
- //双向链表删除,删除第i个结点p
void del(linklist p)
{
p->pri->next=p->next;
p->next->pri=p->pri;
free(p);
}
2.静态链表
- //静态链表类C描述
#define n 100
#define datatype char
struct element
{
datatype data;
int next;
};
typedef struct staticlist
{
struct element s[n+1];
int head,avail;
}staticlist;
- //静态链表初始化
void Initial(staticlist L)
{
L.head=0;
L.avail=1;
for(int i=1;i<n;i++)
{
L.s[i].next=i+1;
L.s[n].next=0;
}
}
- //静态链表插入
void sInsert(staticlist L,int p,datatype x)
{
int q;
if(L.avail==0)
printf("储存空间不够");
else
{
q=L.avail;
L.avail=L.s[q].next;
L.s[q].data=x;
L.s[q].next=L.s[p].next;
L.s[p].next=q;
}
}
- //静态链表删除
void sdel(staticlist L,int p)
{
int q;
q=L.s[p].next;
L.s[p].next=L.s[q].next;
L.s[q].next=L.avail;
L.avail=q;
}