线性表之双向链表

来源:互联网 发布:淘宝开店 商标 随便 编辑:程序博客网 时间:2024/06/06 05:54
#include <stdio.h>#include <stdlib.h>#define Error 0#define  Ok     1typedef   int Status;typedef   int ElemType;typedef  struct   DuLNode{ElemType  data;    struct DuLNode  *prior;struct DuLNode  *next;}DuLNode,*DuLinklist;               //双向链表的结构体  两个指针,分别指向前一个和后一个节点DuLinklist Ini_DuLinklist()              //初始化双向链表{DuLinklist L;L=(DuLNode*)malloc(sizeof(DuLinklist));if(!L) {          printf("出错了啊");  exit(1);}return L;}DuLinklist Create_DuLinklist(DuLinklist L)      //创建双向链表{DuLinklist p,q;p=(DuLNode *)malloc(sizeof(DuLinklist));p=L;printf("请输入您的链表,输入0时结束");q=(DuLNode*)malloc(sizeof(DuLinklist));scanf("%d",&q->data);while((q->data!=NULL)||q->data!=0){p->next=q;q->prior=p;q->next=L;p=p->next;L->prior=p;q=(DuLNode*)malloc(sizeof(DuLinklist));scanf("%d",&q->data);}return L;}Status Insert_DuLinklist(DuLinklist L,int i,ElemType  e )   //向双向链表中插入一个节点{DuLinklist p,s;int j;j=0;p=L;s=(DuLNode*)malloc(sizeof(DuLinklist));if(!s)   return Error;while (p&&j<i){p=p->next;j++;}s->data=e;s->prior=p->prior;p->prior->next=s;s->next=p;p->prior=s;return Ok;}Status Delete_DuLinklist (DuLinklist L,int i,ElemType *e)      //双向链表中删除一个节点{DuLinklist p,s;int j;j=0;p=L;while (p&&j<i){p=p->next;j++;}*e=p->data;p->prior->next=p->next;p->next->prior=p->prior;return Ok;}Status GetElem(DuLinklist L,int i,ElemType *e)        //获取双向链表中第i个元素{DuLinklist p;int j;j=0;p=L;while (p&&j<i){p=p->next;j++;}if(!p||j>i)  return Error;*e=p->data;return  *e;}void print(DuLinklist L){DuLinklist p;p=L->next;printf("您的双向链表为");while(p!=L){printf("%d",p->data);p=p->next;}}void main (){DuLinklist head;int i,e,j,k,a,t;head=Ini_DuLinklist();    Create_DuLinklist(head);print(head);printf("请输入想要取得的数的为第几个元素啊");scanf("%d",&i);GetElem(head,i,&e);printf("第%d个元素为%d",i,e);printf("请输入您要在第几个位置之前插入什么元素");scanf("%d,%d",&j,&k);Insert_DuLinklist(head,j,k);print(head);printf("请输入您要删除的位置");scanf("%d",&a);Delete_DuLinklist(head,a,&t);print(head);getchar();getchar();}
双向链表的插入操作是需要进行四个指针的修改

双向链表的删除操作是需要进行两个指针的修改

双向链表的结构体

双向链表删除节点   修改两个指针

双向链表插入节点 修改四个指针   有顺序的