双链表的结构及其操作

来源:互联网 发布:mm商场软件下载 编辑:程序博客网 时间:2024/06/15 22:24

双链表的结构及其操作

/** * 作者:LinX 2017/6/9-  * * 内容:双链表的结构以及操作  * */   #include <stdio.h> #include <stdlib.h>  typedef int ElemType;  typedef struct DNode { ElemType data; struct DNode *prior; struct DNode *next; }DNode,DLinkList;  /*基本操作*/  DNode* InitList(); //初始化双链表   void CreateListR(DNode* head,int n); //用尾插法创建有n个节点(除去头节点)的双链表   ElemType DelNode(DLinkList *L,int pos); //删除某个节点,并返回删除节点的数据   void InsList(DLinkList *L,int pos,ElemType e);  // 插入数据为e的节点到pos后面的位置  int isEmpty(DLinkList* L); //判断双链表是否为空   DNode* findNode(DLinkList *L,int pos); //找到pos位置上的节点并返回   void printList(DLinkList* L); //打印双链表    int main() {DLinkList *L=InitList();CreateListR(L,4);printList(L);InsList(L,2,10);printList(L);DelNode(L,4);printList(L); }  /*初始化节点*/ DNode* InitList() { DNode *head; head=(DNode *) malloc (sizeof(DNode)); head->next=head;head->prior=head;  }  /*删除指定位置的节点*/ ElemType DelNode(DLinkList *L,int pos) { DNode *p,*q; if(isEmpty(L)==1) { printf("\n表空\n"); return; } p=findNode(L,pos-1); printf("%d\n",p->data); q=p->next; p->next=q->next; if(q->next!=NULL) { p=q->next->prior; } free(q); }  /*找到pos位置上的节点并返回*/ DNode* findNode(DLinkList *L,int pos) { int i; DNode *p; p=L->next; for(i=0;i<pos;i++) {p=p->next; } return p; }   /*向pos位置后面插入数据为e的节点*/ void InsList(DLinkList *L,int pos,ElemType e) { DNode *s,*p; if(isEmpty(L)) { printf("\n空表\n"); return; } s=(DNode *)malloc(sizeof(DNode)); s->data=e; s->next=NULL; p=findNode(L,pos-1); s->next=p->next;p->next=s;s->prior=p;p->next->prior=s;  }    /*创建节点个数为n的双链表*/  void CreateListR(DNode* head,int n) { DNode *r,*s; int i; ElemType e; r=head; for(i=0;i<n;i++) { scanf("%d",&e); s=(DNode *)malloc(sizeof(DNode));s->data=e;r->next=s;s->prior=r;r=s; } r->next=NULL; }  /*打印双链表*/   void printList(DLinkList *L) { DNode* p; if(isEmpty(L)) { printf("\n空表\n"); return; } p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); }   /*判空*/ int isEmpty(DLinkList* L)  { if(L->next==L&&L->prior==L) { return 1; } return 0; }      


原创粉丝点击