尾插法创建双链表
dlklist create_d_list(dpointer dlist)
{
dpointer dnode,rear;
int i;
dlist=(dpointer) malloc(sizeof(*dlist));
if(!dlist)
return NULL;
rear=dlist;
for (i=1;i<12;i++)
{
dnode=(dpointer)malloc(sizeof(*dnode));
if(!dnode)
return NULL;
rear->next=dnode;
dnode->data=i;
dnode->prior=rear;
rear=dnode;
}
return dlist;
}
数据查找
dlklist get_dlist_seq(dpointer dlist,int data,int inode)
{
int j=0;
dpointer dp=NULL;
if(inode<0)
return NULL;
if(inode==j)
return dlist->next;
for(dp=dlist->next;dp!=NULL;dp=dp->next)
{
j++;
if(j==inode)
break;
}
return dlist;
}
双链表中插入数据:
dlklist insert_data_d_list(dpointer dlist,int data,int inode)
{
dpointer dinsert,getnode;
getnode=get_dlist_seq(dlist,inode-1);
if(!getnode)
return NULL;
dinsert=(dpointer)malloc(sizeof(*dinsert));
if(!dinsert)
return NULL;
dinsert->data=data;
dinsert->next=getnode;
getnode->prior->next=dinsert;
dinsert->prior=getnode->prior;
getnode->prior=dinsert;
return dlist;
}
删除双链表中的某个节点:
dlklist del_node_dlist(dpointer dlist,int inode)
{
dpointer dnode;
dnode=get_dlist_seq(dlist,inode);
if(!dnode)
return NULL;
dnode->prior->next=dnode->next;
dnode->next->prior=dnode->prior;
if(dnode)
free(dnode);
return dlist;
}