1.双向链表
typedef struct shuangxiang
{
int data;
struct shuangxiang *next;
struct shuangxiang *prev;
}biao;
2.哨兵位创建
void setshaobing(biao**point)
{
*point=(biao*)malloc(sizeof(biao));
*point->data=-1;
*point->next=*point->prev=NULL;
}
3.尾插
void backset(biao*point,int a)
{
biao*point1=(biao*)malloc(sizeof(biao));
point1->data=a;
point1->prev=point->prev;
point->prev->next=point1;
point1->next=point;
point->prev=point1;}
4.前插
void frontset(biao*point,int x)
{
biao*point1=(biao*)malloc(sizeof(biao));
point1->data=x;
point1->next=point->next;
point1->prev=point;
point->next->prev=point1;
point->next==point1;
}
5.尾删
void backlose(biao*point)
{
assert(point);
assert(point->next);
point->prev=point->prev->prev;
point->prev->prev->next=point;
free(point->prev);
point->prev=NULL;
}
6.头删
void frontlose(biao*point)
{
assert(point);
assert(point->next);
point->next=point->next->next;
point->next->next->prev=point;
free(point->next);
point->next=NULL;
}
7.查找
biao*find(biao* point,int x)
{
assert(point);
assert(point->next);
biao*point1=point->next;
while(point1!=point)
{
if(point1->val==x)
{
return point1;
}
point1=point1->next;
}
return NULL;
}
8.链表在某位置的删除和添加(和尾插尾删类似)
9.链表的销毁
void destory(biao**point)
{
assert(point);
assert(point->next);
biao*point1=(*point)->next;
while(point1!=point)
{
biao*point2=point1->next;
free(point1);
point1=point2;
}
free(point);
point=NULL;
}