您的位置:首页 > 其它

双链表的增删改查基本操作

2017-10-13 11:24 357 查看
双链表

在单链表的每个结点中再设置一个指向上一跳的前驱结点的指针域

//结构体定义
typedef struct _node
{
dataType data;  //链表中的数据域
struct _node *next;         //链表的下一跳
struct _node *prior;        //链表的上一跳
}LinkNode,*LinkedList;

//双链表
//创建结点
DLinkedList DlistCreatNode(dataType data)
{
DLinkedList node = (DLinkedList)malloc(sizeof(DLinkedList));
if(NULL == node)
{
perror("DlistCreatNode err");
return NULL;
}
node->data = data;
node->next = NULL;
node->prior = NULL;

return node;
}
//头插法
int DlistInsertHead(DLinkedList L,dataType data)
{
DLinkedList p = DlistCreatNode(data);
if(NULL == p)
{
perror("DlistCreatNode err");
return -1;
}
p->next = L->next;
p->prior = L;
L->next->prior = p;
L->next = p;
return 0;
}
//尾插法
int DlistInsertTail(DLinkedList L,dataType data)
{
DLinkedList temp = L;
while(temp->next)
{
temp = temp->next;
}

DLinkedList p = DlistCreatNode(data);
if(NULL == p)
{
perror("DlistCreatNode err");
return -1;
}
temp->next = p;
p->prior = temp;
return 0;
}
//以序号插入
int DlistInsertIndex(DLinkedList L,int i,dataType data)
{
int n = 0;
DLinkedList temp = L;
while(temp->next && n < i - 1)
{
temp = temp->next;
}
if(n < (i-1) || !temp)
{
return -2;//超出链表长度
}
DLinkedList p = DlistCreatNode(data);
if(NULL == p)
{
perror("DlistCreatNode err");
return -1;
}
p->next = temp->next;
p->prior = temp->prior;
temp->next->prior = p;
temp->next = p;
return 0;
}
//删除某一值得结点
int DlistDeleteValue(DLinkedList L,dataType data)
{
int n = 0;
DLinkedList temp = L;
while(temp->next )
{
temp = temp->next;
if(temp->data == data)
{
temp->next->prior = temp->prior;
temp->prior->next = temp->next;
n++;
}
}
return n;
}
//printList
int printDLinkList(DLinkedList L)
{
DLinkedList temp = L;
while(temp->next)
{
temp = temp->next;
printf("%4d ",temp->data);
}
printf("\r\n");
return 0;
}

int main()
{
//双链表
DLinkedList d_List;
dList = DlistCreatNode(NULL);

for(int i = 100;i < 110;i++)
DlistInsertTail(d_List,i);  //创建一个链表
printDLinkList(d_List);

DlistInsertHead(d_List,99);
printDLinkList(d_List);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表