关于双链表的一些操作(尾插法建立双链表,头插法建立双链表,双链表的元素插入,双链表的元素删除)

问题描述(关于双链表的一些操作)

尾插法建立双链表
头插法建立双链表
双链表的元素插入
双链表的元素删除

思路(略)

每一篇博文都需要一场电影来顿悟

源代码(直接上源代码,拿去用!!!)

#include
#include 
using namespace std;
typedef struct DLNode//双链表结构体 
{
	int data;
	struct DLNode *prior;
	struct DLNode *next;
}DLNode;
DLNode* createDlistF(DLNode *&L,int a[],int n)//头插法建立单链表
{
	DLNode *s;
	DLNode *s1;
	int i;
	L=(DLNode*)malloc(sizeof(DLNode));
	L->prior=NULL;
	L->next=NULL;
	s1=L;
	for(i=0;i<n;++i){
		s=(DLNode*)malloc(sizeof(DLNode));
		s->data=a[i];
		//头插法核心代码 
		s->next=L->next;// 重点哦 
		s->prior=L;//
		L->next=s;// 
		L->next->prior=s;// 
	}
	return s1;
} 
DLNode* createDlistR(DLNode *&L,int a[],int n)//尾插法建立双链表
{
	DLNode *s,*r;
	DLNode *s1;//标记双链表 
	int i;
	L=(DLNode*)malloc(sizeof(DLNode));
	L->prior=NULL;
	L->next=NULL;
	r=L;
	s1=L;
	for(i=0;i<n;++i){
		s=(DLNode*)malloc(sizeof(DLNode));
		s->data=a[i];
		/*下面三句将s插入到L的尾部,并且r指向s,s->prior=r,
		这一句是和建立单链表不同的地方*/
		r->next=s;
		s->prior=r;
		r=s;
	} 
	r->next=NULL;
	return s1;
}
//双链表插入结点(按大小顺序插入) 
DLNode* inertDlist(DLNode *&L,int x)
{
	DLNode *s;
	DLNode *s1;
	s=(DLNode*)malloc(sizeof(DLNode));
	s->prior=NULL;
	s->next=NULL;
	s->data=x;
	DLNode *m=L->next;
	s1=L;//唯一标记链表 
	while(m!=NULL){
		if(x<=m->data){ 
			s->next=m;
			s->prior=m->prior;
			m->prior->next=s;
			m->prior=s;
			break;
		}
		m=m->next;
	}
	return s1;
}
// 双链表删除结点(找到数据域为x的结点并删除) 
DLNode* deleteDlist(DLNode *&L,int x) 
{
	DLNode *s1=L;//标记双链表 
	DLNode *m=L->next; 
	while(m!=NULL){
		if(m->data==x){
			m->prior->next=m->next;
			m->next->prior=m->prior;
			free(m);
			break;
		}
		m=m->next;
	}
	return s1;
}
void shuChu(LNode *x)
{
	LNode *x1=x->next;
	while(x1!=NULL){
		cout<<x1->data<<" ";
		x1=x1->next;
	}
} 
int main()
{
	DLNode *S1,*S2,*S3,*S4;
	int n;
	cin>>n;
	int a[n];
	for(int i=0;i<n;++i){
		cin>>a[i];
	}
	DLNode *c1=createDlistR(S1,a,n);
	//DLNode *c2=createDlistF(S2,a,n);//头插法建立单链表(逆序建立) 
	int x;
	cin>>x;
	//DLNode *c3=inertDlist(c1,x);
	DLNode *c4=deleteDlist(c1,x);
	shuChu(c4);
	return 0;
} 

执行结果

双链表删除元素的执行结果

关于双链表的一些操作(尾插法建立双链表,头插法建立双链表,双链表的元素插入,双链表的元素删除)_第1张图片

双链表插入元素的执行结果

关于双链表的一些操作(尾插法建立双链表,头插法建立双链表,双链表的元素插入,双链表的元素删除)_第2张图片

你可能感兴趣的:(数据结构--线性表问题)