#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(" "); } 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; }