#include <stdio.h>
#include <stdlib.h>
#include "./2.h"
Dublinklist* create_doublelinklist()
{
Dublinklist* head = (Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == head)
{
printf("创建失败\n");
return NULL;
}
head->msg.len=0;
head->next=NULL;
head->prev=NULL;
return head;
}
void Head_insertion(Dublinklist* head, datatype num)
{
Dublinklist* temp=(Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("头插失败\n");
return;
}
temp->msg.data=num;
temp->next=NULL;
temp->prev=NULL;
temp->next=head->next;
head->next=temp;
temp->prev=head;
if(temp->next != NULL)
{
temp->next->prev=temp;
}
head->msg.len++;
return;
}
void Tail_insertion(Dublinklist* head, datatype num)
{
Dublinklist* temp=(Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("尾插失败\n");
}
temp->msg.data=num;
temp->next=NULL;
temp->prev=NULL;
Dublinklist* p=head;
while(p->next != NULL)
{
p=p->next;
}
temp->next=p->next;
p->next=temp;
temp->prev=p;
head->msg.len++;
return;
}
void Header_deletion(Dublinklist* head)
{
if(NULL == head || NULL == head->next)
{
printf("头删失败\n");
}
Dublinklist* temp=head->next;
head->next=temp->next;
temp->prev=head;
if(temp->next != NULL)
{
temp->next->prev=temp;
}
datatype num=temp->msg.data;
free(temp);
head->msg.len--;
return;
}
void Tail_deletion(Dublinklist* head)
{
if(NULL == head || NULL == head->next)
{
printf("尾删失败\n");
}
Dublinklist* temp=head->next;
while(temp->next != NULL)
{
temp=temp->next;
}
temp->prev->next=temp->next;
datatype num=temp->msg.data;
free(temp);
head->msg.len--;
return;
}
void Middle_insertion(Dublinklist* head, datatype num, int pos)
{
if(pos <= 0)
{
printf("插入失败\n");
}
Dublinklist* p=head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
if(NULL == 0)
{
printf("插入失败\n");
}
}
Dublinklist* temp=(Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("创建失败\n");
}
temp->msg.data=num;
temp->next=NULL;
temp->prev=NULL;
temp->next=p->next;
p->next = temp;
temp->prev=p;
if(temp->next != NULL)
{
temp->next->prev=temp;
}
head->msg.len++;
return;
}
void Middle_deletion(Dublinklist* head, int pos)
{
if(NULL == head || head->next == NULL)
{
printf("删除失败\n");
}
if(pos <= 0)
{
printf("删除失败\n");
}
Dublinklist* p=head;
for(int i=0;i<pos;i++)
{
p=p->next;
if(NULL == p)
{
printf("删除失败\n");
}
}
p->prev->next=p->next;
if(p->next != NULL)
{
p->next->prev=p->prev;
}
datatype num=p->msg.data;
free(p);
head->msg.len--;
return;
}
void show_doublelinklist(Dublinklist* head)
{
Dublinklist* p=head;
while(p->next != NULL)
{
p=p->next;
printf("%d ",p->msg.data);
}
printf("\n");
return;
}