双向链表学习

来源:互联网 发布:idea新建普通java项目 编辑:程序博客网 时间:2024/05/16 11:20
#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;}

0 0
原创粉丝点击