数据结构 P36-37 算法实现 双向循环链表的插入与删除
2017-10-11 16:00
666 查看
/*双向链表的插入与删除*/
#include<iostream>
using namespace std;
struct node //双向链表的节点
{
int date;
node *next; //指向后一个节点
node *prior; //指向前一个节点
};
class list //创建链表类
{
node *head,*s,*p,*q; //head—头结点 s—新节点 p—创建链表 q—打印链表/插入元素
public:
list(){head=NULL;} //创建一个空的头结点
int InitList(); //初始化
void output(); //打印
int inser(int Length); //插入
int Delete(int Length); //删除
};
int list::InitList()
{
int x=1; //x 记录初始的表长
while (x<11) //创建一个长度为10的链表
{
s=new node(); //创建一个新的节点
s->date=x;
if(head==NULL)
{s->next=s->prior=NULL;p=head=s;}
else
{ s->date=x;
s->next=head; //循环链表与非循环的区别
s->prior=p; //将节点p作为新节点s的上一个节点
head->prior=s;
p->next=s; //将新节点s作为节点p的下一个节点
p=p->next;} //节点p后移
++x;
}
return x-1;
}
void list::output() //打印链表
{
q=head;
cout<<"linklist: ";
cout<<q->date<<" ";
q=q->next;
if(q!=NULL)
for (;q!=head;q=q->next)
cout<<q->date<<" ";
cout<<". head is "<<head->date<<endl;
}
int list::inser(int Length)
{ int y=1; // y 记录当前节点在链表中的排位
int place , elem;
node *temp; //创建一个临时节点
cout<<"请输入要插入的数据:"<<endl;
cin>>elem;
cout<<"请输入要插入的位置:"<<endl;
cin>>place;
cout<<"数据:"<<elem<<" 位置:"<<place<<endl;
if(place>Length)
{cout<<"当前链表长度为:"<<Length<<endl;return 0;}
s=new node();
s->date=elem;
for(q=head;y<Length+1; ++y)
{
if(y==place)
{
temp=q->prior; //临时节点为当前节点的前一个节点
temp->next=s;
s->prior=temp;
s->next=q;
q->prior=s;
if(place==1)
{ head=s; }
break;
}
q=q->next;
}//for
}
int list::Delete(int Length)
{
int y=1; // y 记录当前节点在链表中的排位
int elem;
node *temp1,*temp2; //创建两个临时节点
cout<<"请输入要删除的数据:"<<endl;
cin>>elem;
for(q=head;y<Length+1;++y)
{
if(q->date==elem)
{
temp1=q->prior; //临时节点1为当前节点的前一个节点
temp2=q->next; //临时节点2为当前节点的后一个节点
temp1->next=temp2;
temp2->prior=temp1;
if(head->date==elem)
{ head=head->next; }
return 0;
}
q=q->next;
}//for
cout<<"链表中没有你所输入的数据,所以无法执行删除"<<endl;
}
int main()
{
list A;
int Length=A.InitList();
cout<<Length;
A.output();
A.inser(Length);
++Length;
A.output();
A.Delete(Length);
A.output();
while(1){}
return 0;
}
————————————————————————————————————————————————————————
/*双向链表的插入—算法2.18*/
int list::inser(int Length)
{ int y=1; // y 记录当前节点在链表中的排位
int place , elem;
node *temp; //创建一个临时节点
cout<<"请输入要插入的数据:"<<endl;
cin>>elem;
cout<<"请输入要插入的位置:"<<endl;
cin>>place;
cout<<"数据:"<<elem<<" 位置:"<<place<<endl;
if(place>Length)
{cout<<"当前链表长度为:"<<Length<<endl;return 0;}
s=new node();
s->date=elem;
for(q=head;y<Length+1; ++y)
{
if(y==place)
{
temp=q->prior; //临时节点为当前节点的前一个节点
temp->next=s;
s->prior=temp;
s->next=q;
q->prior=s;
if(place==1)
{ head=s; }
break;
}
q=q->next;
}//for
}
/*双向链表的删除—算法2.19*/
int list::Delete(int Length)
{
int y=1; // y 记录当前节点在链表中的排位
int elem;
node *temp1,*temp2; //创建两个临时节点
cout<<"请输入要删除的数据:"<<endl;
cin>>elem;
for(q=head;y<Length+1;++y)
{
if(q->date==elem)
{
temp1=q->prior; //临时节点1为当前节点的前一个节点
temp2=q->next; //临时节点2为当前节点的后一个节点
temp1->next=temp2;
temp2->prior=temp1;
if(head->date==elem)
{ head=head->next; }
return 0;
}
q=q->next;
}//for
cout<<"链表中没有你所输入的数据,所以无法执行删除"<<endl;
}
#include<iostream>
using namespace std;
struct node //双向链表的节点
{
int date;
node *next; //指向后一个节点
node *prior; //指向前一个节点
};
class list //创建链表类
{
node *head,*s,*p,*q; //head—头结点 s—新节点 p—创建链表 q—打印链表/插入元素
public:
list(){head=NULL;} //创建一个空的头结点
int InitList(); //初始化
void output(); //打印
int inser(int Length); //插入
int Delete(int Length); //删除
};
int list::InitList()
{
int x=1; //x 记录初始的表长
while (x<11) //创建一个长度为10的链表
{
s=new node(); //创建一个新的节点
s->date=x;
if(head==NULL)
{s->next=s->prior=NULL;p=head=s;}
else
{ s->date=x;
s->next=head; //循环链表与非循环的区别
s->prior=p; //将节点p作为新节点s的上一个节点
head->prior=s;
p->next=s; //将新节点s作为节点p的下一个节点
p=p->next;} //节点p后移
++x;
}
return x-1;
}
void list::output() //打印链表
{
q=head;
cout<<"linklist: ";
cout<<q->date<<" ";
q=q->next;
if(q!=NULL)
for (;q!=head;q=q->next)
cout<<q->date<<" ";
cout<<". head is "<<head->date<<endl;
}
int list::inser(int Length)
{ int y=1; // y 记录当前节点在链表中的排位
int place , elem;
node *temp; //创建一个临时节点
cout<<"请输入要插入的数据:"<<endl;
cin>>elem;
cout<<"请输入要插入的位置:"<<endl;
cin>>place;
cout<<"数据:"<<elem<<" 位置:"<<place<<endl;
if(place>Length)
{cout<<"当前链表长度为:"<<Length<<endl;return 0;}
s=new node();
s->date=elem;
for(q=head;y<Length+1; ++y)
{
if(y==place)
{
temp=q->prior; //临时节点为当前节点的前一个节点
temp->next=s;
s->prior=temp;
s->next=q;
q->prior=s;
if(place==1)
{ head=s; }
break;
}
q=q->next;
}//for
}
int list::Delete(int Length)
{
int y=1; // y 记录当前节点在链表中的排位
int elem;
node *temp1,*temp2; //创建两个临时节点
cout<<"请输入要删除的数据:"<<endl;
cin>>elem;
for(q=head;y<Length+1;++y)
{
if(q->date==elem)
{
temp1=q->prior; //临时节点1为当前节点的前一个节点
temp2=q->next; //临时节点2为当前节点的后一个节点
temp1->next=temp2;
temp2->prior=temp1;
if(head->date==elem)
{ head=head->next; }
return 0;
}
q=q->next;
}//for
cout<<"链表中没有你所输入的数据,所以无法执行删除"<<endl;
}
int main()
{
list A;
int Length=A.InitList();
cout<<Length;
A.output();
A.inser(Length);
++Length;
A.output();
A.Delete(Length);
A.output();
while(1){}
return 0;
}
————————————————————————————————————————————————————————
/*双向链表的插入—算法2.18*/
int list::inser(int Length)
{ int y=1; // y 记录当前节点在链表中的排位
int place , elem;
node *temp; //创建一个临时节点
cout<<"请输入要插入的数据:"<<endl;
cin>>elem;
cout<<"请输入要插入的位置:"<<endl;
cin>>place;
cout<<"数据:"<<elem<<" 位置:"<<place<<endl;
if(place>Length)
{cout<<"当前链表长度为:"<<Length<<endl;return 0;}
s=new node();
s->date=elem;
for(q=head;y<Length+1; ++y)
{
if(y==place)
{
temp=q->prior; //临时节点为当前节点的前一个节点
temp->next=s;
s->prior=temp;
s->next=q;
q->prior=s;
if(place==1)
{ head=s; }
break;
}
q=q->next;
}//for
}
/*双向链表的删除—算法2.19*/
int list::Delete(int Length)
{
int y=1; // y 记录当前节点在链表中的排位
int elem;
node *temp1,*temp2; //创建两个临时节点
cout<<"请输入要删除的数据:"<<endl;
cin>>elem;
for(q=head;y<Length+1;++y)
{
if(q->date==elem)
{
temp1=q->prior; //临时节点1为当前节点的前一个节点
temp2=q->next; //临时节点2为当前节点的后一个节点
temp1->next=temp2;
temp2->prior=temp1;
if(head->date==elem)
{ head=head->next; }
return 0;
}
q=q->next;
}//for
cout<<"链表中没有你所输入的数据,所以无法执行删除"<<endl;
}
相关文章推荐
- 数据结构双向循环链表的C语言实现(插入,查询,删除)
- 双向循环链表插入算法的C++程序实现
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 双向循环链表删除算法的C++程序实现
- 实现单向循环链表的创建、测长、打印、插入、删除及逆置
- 双向循环链表的插入与删除
- 二级指针实现单链表的插入、删除及 linux内核源码双向链表之奇技
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 双向循环链表的插入和删除
- 实现双向链表的创建、测长、打印、插入、删除
- 如何使用c语言实现双向链表的插入删除操作
- C++实现双向链表的创建,插入,修改,删除
- 数据结构--双向循环链表--插入