循环链表

#include<iostream>
using namespace std;
struct Node
{
	int data;
	Node *pror;//前驱
	Node *next;//后继
};
class DLinkList
{
  private:
	 Node *head;
  public:
	 DLinkList();
	 ~DLinkList();
	 void CreateDlinkList(int k);
	 void DispList();
	 void InsertElem(int i,int e);
	 void DeleteElem(int i);
	 int  GetPror(int i);

};

DLinkList::DLinkList()
{
	head = new Node();
	head->next = head;
	head->pror = head;

}

int DLinkList::GetPror(int i)
{
	Node *p = head;
	int j=0;
	while(j<i && p->next != head)
	{
		p = p->next;
		j++;
	}
	cout<<p->pror->data;
	return p->pror->data;
}

DLinkList::~DLinkList()
{
	Node *p,*q;
	q = head;
	while(q ->next != head)
	  q = q->next;
	while(head != head->next)
	{
	   p = head;
	   head = head->next;
	   head->pror = q;
	   q->next = head;
	   delete p;

	}
	head = NULL;
}

void DLinkList::CreateDlinkList(int k)
{
   int i=0;
   Node *p = head;
   Node *s;
   for(i;i<k;i++)
   {
	   s = new Node;
	   cin>>s->data;
	   p->next = s;
	   s->pror = p;
	   head->pror = s;
	   s->next = head;
	   p = s;
   }

}

void DLinkList::DispList()
{
   Node *p = head->next;
   while(p != head)
   {
	   cout<<p->data<<" ";
	   p = p->next;
   }
   cout<<endl;

}

void DLinkList::DeleteElem(int i)
{
	Node *p = head;
	int j=1;
	while(j<i && p->next != head)
	{
		p = p->next;
		j++;
	}
	Node *s = p->next;
	p->next = s->next;
	s->next->pror = p;
	delete s;
}

void DLinkList::InsertElem(int i,int e)
{
	Node *p = head;
	int j=1;
	while(j<i && p->next !=head)
	{
	   p = p->next;
	   j++;
	}
	Node *s = new Node();
	s->data = e;
	p->next->pror = s;
	s->next = p->next;
	p->next = s;
	s->pror = p;
}

int main()
{
	DLinkList *list = new DLinkList();
	list->CreateDlinkList(5);
	list->DispList();
	list->InsertElem(3,10);
	list->DispList();
	list->DeleteElem(3);
	list->DispList();
	list->GetPror(3);
	system("pause");
	delete list;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值