双向链表学习

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值