#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>
typedef struct node
{
int data;
struct node *prior;
struct node *next;
}NODE,*PNODE,*LINKLIST;
//初始化
void init(LINKLIST *list)
{
*list = (PNODE)malloc(sizeof(NODE));
(*list)->prior=NULL;//前驱
(*list)->next=NULL;//后继
}
//插入 到第i个位置 i>=1
void insert(LINKLIST list,int i,int data)
{
PNODE p = list,q;
//将p移动到i-1个位置
while(--i && p)
p=p->next;
assert(p);//防止i的位置不合法
q = (PNODE)malloc(sizeof(NODE));//q为插入节点
q->data = data;
q->next=p->next;//插入节点的后继
q->prior = p;//插入节点的前驱
if(p->next)
p->next->prior = q;
p->next = q;
}
//删除
void del(LINKLIST list,int i,int *data)
{
PNODE p = list,q;
//将p移动到i-1个位置
while(--i && p)
p=p->next;
assert(p && p->next);//防止i的位置不合法
q = p->next;
p->next = q->next;
if(q->next)
q->next->prior = p;
free(q);
}
//添加
void add(LINKLIST list,int data)
{
PNODE p=list,q;
//将p移动到最后位置
while(p->next)
p=p->next;
q = (PNODE)malloc(sizeof(NODE));//q为要添加的节点
q->data = data;
q->next = NULL;
q->prior = p;
p->next = q;
}
//清空
void clear(LINKLIST list)
{
PNODE p=list,q;
p=p->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
list->next=NULL;
}
//销毁
void destroy(LINKLIST *list)
{
PNODE p=*list,q;
while(p)
{
q=p->next;
free(p);
p=q;
}
*list=NULL;
}
//打印链表
void display(LINKLIST list)
{
PNODE p =list;
assert(p);
while(p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
int main()
{
int i,data;
LINKLIST list;
init(&list);
for(i=1;i<=5;i++)
add(list,i);
insert(list,6,100);
display(list);
destroy(&list);
system("pause");
return 0;
}