实现代码如下(C++):
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>
using namespace std;
typedef struct student
{
int data;
struct student *next;
struct student *pre;
}dnote;
dnote *creat() //建立双向链表
{
dnote *head,*p,*s;
int x,cycle=1;
head=(dnote *)malloc(sizeof(dnote));
p=head;
while(cycle)
{
cout<<"Please input the data:";
cin>>x;
if (x!=0)
{
s=(dnote *)malloc(sizeof(dnote));
s->data=x;
p->next=s;
s->pre=p;
p=s;
}
else
cycle=0;
}
head=head->next;
head->pre=NULL;
p->next=NULL;
return head;
}
void print(dnote *head)
{
dnote *p;
p=head;
cout<<"The double list is:";
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
}
dnote *del(dnote *head,int num) //删除节点
{
dnote *p1;
p1=head;
while(num!=p1->data&&p1->next!=NULL)
{
p1=p1->next;
}
if (num==p1->data)
{
if (p1==head) //删除头节点
{
head=head->next;
head->pre=NULL;
free(p1);
}
else if (p1->next==NULL) //删除尾节点
{
p1->pre->next=NULL;
free(p1);
}
else //删除中间节点
{
p1->pre->next=p1->next;
p1->next->pre=p1->pre;
free(p1);
}
}
else
cout<<"could not find"<<num;
return head;
}
dnote *insert(dnote *head,int num) //插入节点
{
dnote *p0,*p1;
p1=head;
p0=(dnote *)malloc(sizeof(dnote));
p0->data=num;
while(p0->data>p1->data&&p1->next!=NULL)
{
p1=p1->next;
}
if (p0->data<=p1->data)
{
if (head==p1) //插入到头节点
{
p0->next=p1;
p0->pre=NULL;
head=p0;
}
else //插入到中间节点
{
p1->pre->next=p0;
p0->next=p1;
p0->pre=p1->pre;
p1->pre=p0;
}
}
else //插入到尾节点
{
p1->next=p0;
p0->pre=p1;
p0->next=NULL;
}
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
dnote *head;
int del_num,insert_num;
head=creat();
print(head);
cout<<"请输入要删除的数据:";
cin>>del_num;
head=del(head,del_num);
print(head);
cout<<"请输入要插入的数字:";
cin>>insert_num;
head=insert(head,insert_num);
print(head);
return 0;
}