List item
#include<stdio.h>
#include<malloc.h>#define ElemType inttypedef struct Dulink{ ElemType data; struct Dulink *prior; struct Dulink *next;}Dulink,*DNode;typedef struct List{ int size; struct Dulink *first; struct Dulink *last;}List;void Init(List *list){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); list->first=list->last=s; if(s) printf(“初始化成功!\n”); s->next=s->prior=NULL; list->size=0;}void Creat(List *list,ElemType x){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); if(!s) printf(“结点分配失败!\n”); s->data=x; s->next=NULL; s->prior=list->last; list->last->next=s; list->last=s; list->size++;}void show(List *list){ Dulink *p=list->first->next; printf(“目前双向链表中的元素是:\n”); while(p!=NULL) { printf("%d>>",p->data); p=p->next; } printf(“NUL已经输出完毕\n”);}void find(List *list,ElemType x){ Dulink *p=list->first->next; while(p->data!=x) { p=p->next; } printf(“你要查找的实际元素是:%d\n”,p->prior->data);}void Insert(List *list,ElemType key,int x){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); if(s==NULL) printf(“节点申请失败!\n”); s->data=key; s->next=s->prior=NULL; Dulink *p=list->first->next; int i=1; while(i<x) { i++; p=p->next; } p->prior->next=s; s->prior=p->prior; s->next=p; p->prior=s; list->size++;}int length(List *list){ return list->size;}void main(){ List mylist; Init(&mylist); ElemType Item; int pos; printf(“请输入双链表的数据:\n”); while(scanf("%d",&Item),Item!=-1) { Creat(&mylist,Item); } show(&mylist); printf(“此时双链表的长度是:%d\n”,length(&mylist)); printf(“请输入你要查找的元素的后继元素:\n”); scanf("%d",&Item); find(&mylist,Item); printf(“请输入你要插入的元素\n”); scanf("%d",&Item); printf(“请输入你要插入的位置\n”); scanf("%d",&pos); Insert(&mylist,Item,pos); show(&mylist); printf(“此时双链表的长度是:%d\n”,length(&mylist));}