c语言双链表的尾插法建立与按下标删除

#include
#include
typedef struct Dnode
{
	int data;
	struct Dnode *prior,*next;
	
}Dnode,*DLinklist;

DLinklist InitList(DLinklist &L)
{
	L = (Dnode*)malloc(sizeof(Dnode));//初始化头节点
	L ->prior = NULL;
	L->next = NULL ;
	return L;
}
void TailInsert(DLinklist &L)
{
	
	Dnode *s ,*r=L;//*r是指向尾节点的指针 
	
	for (int i =0 ;i<10;i++){
		s = (Dnode *)malloc(sizeof(Dnode));
		s->data=i+1;
		s->prior = r;
		r->next =s; 
		r=s;
	}
	r->next=NULL;
}

void showlist(DLinklist L){
	Dnode *p=L->next;
	while(p){
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
	}
int Deletebyindex(DLinklist &L,int j )
{
	int i =1;
	Dnode *p=L->next;
//	p = (Dnode *)malloc(sizeof(Dnode));
	while(inext;
		i++;
	}
	if (p->next!=NULL)
		{
		p->next->prior=p->prior;}
	int e=p->data;
	p->prior->next=p->next;
	return e;
} 
int main()
{
	DLinklist L;
	InitList(L);
	TailInsert(L);
	showlist(L);
//	printf(Deletebyindex(L,1));
	int e = Deletebyindex(L,10);
//	e = Deletebyindex(L,1);
	showlist(L);
 } 

双链表与单链表之间的差别就是双链表的每一个节点都有指向这个节点上一个节点的指针,增删改查这些操作应该是同理可得的没有什么差别。这里只列出的尾插法建立与按下标删除双链表这两种操作。还有就是尾节点的删除要进行特殊处理。

删除第十个元素的操作

c语言双链表的尾插法建立与按下标删除_第1张图片

 

你可能感兴趣的:(c语言,数据结构)