双向链表的基本操作
# include <iostream>
using namespace std;
typedef struct DulNode
{
int data;
struct DulNode *next;
struct DulNode *prior;
}DulNode,*DuLinkList;
int InitList(DuLinkList &l)//构造空的双向链表
{
l = new DulNode;
l->next = NULL;
l->prior = NULL;
return 1;
}
void CreateList(DuLinkList &l,int n)//建立双向链表
{
InitList(l);
DuLinkList p,q;
p = l;
int i;
cout<<"请输入相关数据"<<endl;
for(i=0;i<n;i++)
{
q = new DulNode;
cin>>q->data;
p->next = q;
q->prior = p;
q->next = NULL;
p = p->next;
}
}
void ListShow(DuLinkList &l)//输出双向链表
{
DuLinkList p;
for(p=l->next;p;p=p->next)
{
cout<<p->data<<" ";
}
cout<<endl;
}
void InsertList(DuLinkList &l,int i)//向双向链表中插入
{
int j;
DuLinkList p,q;
for(j=1,p=l->next;j<i-1;j++,p=p->next);
q = new DulNode;
cout<<"请输入需要插入的元素"<<endl;
cin>>q->data;
q->next = p->next;
p->next->prior = q;
p->next = q;
q->prior = p;
}
void DeleteList(DuLinkList &l,int i)//删除双向链表中的元素
{
int j;
DuLinkList p,q;
for(j=1,p=l->next;j<i-1;j++,p=p->next);
q = p->next;
p->next = q->next;
q->next->prior = p;
delete q;
}
main()
{
DuLinkList l;
int n;
cout<<"请输入需要数据的个数"<<endl;
cin>>n;
CreateList(l,n);
ListShow(l);
cout<<"请输入需要插入的位置"<<endl;
cin>>n;
InsertList(l,n);
ListShow(l);
cout<<"请输入需要删除元素的位置"<<endl;
cin>>n;
DeleteList(l,n);
ListShow(l);
}