1.
int length(linklist head)
{
int len=0;
linklist p=head;
while(p)
{
p=p->next;
len++;
}
return len;
}
void output(linklist head)
{
if(head==NULL)
{
puts("EMPTY");
return;
}
linklist p=head;
while(p)
{
printf("%-5d",p->data);
p=p->next;
}
puts("");
}
linklist insert_head(linklist head,datatype element)
{
linklist s=create_node();
s->data=element;
if(head==NULL)
head=s;
else
{
s->next=head;
s->prev=NULL;
head=s;
}
return head;
}
linklist insert_rear(linklist head,datatype element)
{
linklist s=create_node();
s->data=element;
if(head==NULL)
head=s;
else
{
linklist p=head;
while(p->next)
{
p=p->next;
}
p->next=s;
s->next=NULL;
s->prev=p;
}
return head;
}
linklist del_head(linklist head)
{
if(head==NULL)
return head;
else if(head->next==NULL)
{
linklist del=head;
head=head->next;
head->prev=NULL;
free(del);
del=NULL;
return head;
}
}
linklist del_rear(linklist head)
{
if(head==NULL)
return head;
else if(head->next==NULL)
{
free(head);
head=NULL;
return head;
}
else
{
linklist del=head;
while(del->next)
{
del=del->next;
}
del->prev->next=NULL;
free(del);
del=NULL;
return head;
}
}
2.
linklist insert_pos(linklist head,int pos,datatype element)
{
linklist s=create_node();
s->data=element;
if(head==NULL || pos==1)
head=insert_head(head,element);
return head;
if(pos<1 || pos>length(head)+1)
{
puts("ERROR");
return head;
}
else
{
linklist p=head;
for(int i=1;i<pos-1;i++)
{
p=p->next;
}
s->next=p->next;
s->prev=p;
p->next->prev=s;
p->next=s;
return head;
}
}
linklist del_pos(linklist head,int pos)
{
if(head==NULL)
return head;
if(pos<1 || pos>length(head)+1)
{
puts("ERROR");
return head;
}
else
{
if(pos==1)
{
head=del_head(head);
return head;
}
else if(pos==length(head))
{
head=del_rear(head);
return head;
}
else
{
linklist p=head;
for(int i=1;i<pos;i++)
{
p=p->next;
}
p->prev->next=p->next;
p->next->prev=p->prev;
free(p);
p=NULL;
return head;
}
}
}
linklist change_pos(linklist head,int pos,datatype element)
{
if(pos<1 || pos>length(head)+1)
{
puts("ERROR");
return head;
}
linklist p=head;
for(int i=1;i<pos;i++)
{
p=p->next;
}
p->data=element;
return head;
}
void find_pos(linklist head,int pos)
{
if(pos<1 || pos>length(head)+1)
{
puts("ERROR");
return;
}
linklist p=head;
for(int i=1;i<pos;i++)
{
p=p->next;
}
printf("%d\n",p->data);
return;
}
3.栈是先进后出的思想,队列是先进先出的思想
4.堆区释放内存时,指针未指向释放内存首地址