#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct DLNode{
struct DLNode *front,*tail;
ElemType data;
}DLNode,*LinkList;
//初始化双向链表
int InitList(LinkList &L){
L=(LinkList)malloc(sizeof(DLNode));
L->front=L;
L->tail=L;
return 0;
}
//插入元素
int InsertList(LinkList &L,int pos ,ElemType e){
LinkList p=L,s;
int j=0;
while(j<pos-1){
p=p->tail;
j++;
}
s=(LinkList)malloc(sizeof(DLNode));
s->data=e;
s->tail=p->tail;
p->tail->front=s;
p->tail=s;
s->front=p;
return 0;
}
//删除元素
int DeleteList(LinkList &L,int pos ,ElemType &e){
LinkList p=L,q;
int j=0;
while(j<pos -1){
p=p->tail;
j++;
}
q=p->tail;
e=q->data;
p->tail=q->tail;
q->tail->front=q->front;
return e;
}
//得到元素
int GetList(LinkList L,int pos,ElemType &e){
LinkList p=L;
int j=0;
while(j<pos){
p=p->tail;
j++;
}
e=p->data;
return e;
}
//判空双链表
int EmptyList(LinkList L){
if(L->tail==L&&L->front==L){
return 1;
}
else
{
return 0;
}
}
//清空双链表
int ClearList(LinkList &L){
LinkList p=L->tail,q;
while(p!=L){
q=p->tail;
free(p);
p=q;
}
L->tail=L->front=L;
return 0;
}
int main(){
LinkList L,k;
int i,e;
InitList(L);
for(i=1;i<=5;i++){
InsertList(L,1,i);
}
for(k=L->tail;k!=L;k=k->tail){
printf("%d ",k->data);
}
printf("\n");
GetList(L,3,e);
printf("%d",e);
printf("\n");
DeleteList(L,3,e);
printf("%d",e);
printf("\n");
for(k=L->tail;k!=L;k=k->tail){
printf("%d ",k->data);
}
printf("\n");
ClearList(L);
printf("%d",EmptyList(L));
return 0;
}
双向链表学习
最新推荐文章于 2023-12-20 13:35:53 发布