线性表——双链表

#include<bits/stdc++.h>
using namespace std;

typedef struct DNode{
	int data;
	struct DNode *prior,*next;
}DNode,*List;

//初始化 
void InitList(List &L){
	L=(DNode*)malloc(sizeof(DNode));
	L->next=L->prior=NULL;
}

//头插 
void ListInsertHead(List &L,int e){
	DNode* p=L;
	DNode* s=(DNode*)malloc(sizeof(DNode));
	s->data=e;
	if(p->next==NULL){
		s->next=NULL;
		s->prior=p;
		p->next=s;
	}else{
		s->next=p->next;
		s->prior=p;
		p->next->prior=s;
		p->next=s;
	}
}

//尾插 
void ListInsertTail(List &L,int e){
	DNode* p=L;
	DNode* s=(DNode*)malloc(sizeof(DNode));
	while(p->next!=NULL)
		p=p->next;
	s->data=e;
	s->next=NULL;
	s->prior=p;
	p->next=s;
}

//中间插 
void ListInsertMiddle(List &L,int i,int e){
	DNode* p=L;
	int j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL){
		cout<<"Insert Error:Element Not Found!"<<endl;
	}else{
		DNode* s=(DNode*)malloc(sizeof(DNode));
		s->data=e;
		s->next=p->next;
		s->prior=p;
		p->next->prior=s;
		p->next=s;
	}
}

//删除 
void ListDelete(List &L,int i){
	DNode* p=L;
	int j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL||p->next==NULL){
		cout<<"Delete Error:Element Not Found!"<<endl;
	}else{
		DNode* q=p->next;
		p->next=q->next;
		q->next->prior=p;
		free(q);
	}
}

//打印 
void PrintList(List L){
	DNode* l=L->next;
	while(l!=NULL){
		cout<<l->data<<" ";
		l=l->next;
	}
	cout<<"END"<<endl;
}

int main(){
	List L;
	InitList(L);
	ListInsertHead(L,5);
	ListInsertHead(L,3);
	ListInsertHead(L,2);
	ListInsertTail(L,7);
	ListInsertTail(L,11);
	PrintList(L);
	ListInsertMiddle(L,4,6);
	PrintList(L);
	ListDelete(L,1);
	PrintList(L);
	ListDelete(L,6);
	return 0;
}
posted @ 2024-07-09 10:08  小梦贴贴  阅读(19)  评论(0)    收藏  举报