您的位置:首页 > 其它

循环双链表的简单实现

2014-07-30 17:38 253 查看
<span style="font-size:18px;"><strong>//代码为自己编写,可能有问题,欢迎大家留言指正!</strong></span>
<span style="font-size:18px;"><strong>
</strong></span>
#include <iostream>
#include <string>
using namespace std;
typedef struct dnode
{
int val;
dnode *prior;
dnode *next;
}dnode;

dnode * create();
void traverse(dnode *pHead);
bool insert(dnode *pHead,int pos,int val);
bool del(dnode *pHead,int pos,int &val);
void inverse(dnode *pHead);
void main()
{
dnode *pHead = create();
traverse(pHead);
insert(pHead,3,5);
traverse(pHead);
int val;
del(pHead,4,val);
cout<<val<<endl;
traverse(pHead);
inverse(pHead);
//traverse(pHead);
}

//建立循环双链表
dnode *create()
{
dnode *pHead = new dnode,*pTail;
pTail = pHead;
pTail->next = pHead;
//pHead->prior = pTail;
for (int i =0;i<4;i++)
{
dnode *pNew = new dnode;
pNew->val = i+1;
pNew->next = pTail->next;
pTail->next = pNew;
pNew->prior = pTail;
pTail = pNew;
}
pHead->prior = pTail;
return pHead;
}

void traverse(dnode *pHead)
{
dnode *p =pHead->next;
while (p != pHead)
{
cout<<p->val<<" ";
p = p->next;
}
cout<<endl;
}

bool insert(dnode *pHead,int pos,int val)
{
dnode *p = pHead,*q;
int i = 1;
while (p->next != pHead && i < pos) //找到pos-1个节点(不包括头结点)
{
++i;
p = p->next;
}

if (i > pos || p->next == pHead)
{
return false;
}
dnode *pNew = new dnode;
q = p->next;
pNew->val = val;
p->next = pNew;
pNew->prior = p;
pNew->next = q;
q->prior = pNew;
return true;
}

bool del(dnode *pHead,int pos,int &val)
{
dnode *p = pHead,*q;
int i = 1;
while (p->next != pHead && i < pos) //找到pos-1个节点(不包括头结点)
{
++i;
p = p->next;
}

if (i > pos || p->next == pHead)
{
return false;
}
q = p->next; //q为要删除的节点
val = q->val;
p->next = q->next;
q->next->prior = p;
delete q;
return true;
}
//逆序输出
void inverse(dnode *pHead)
{
dnode *p = pHead->prior; //p指向最后一个节点
while (p != pHead)
{
cout<<p->val<<" ";
p = p->prior;
}
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: