本文共 2299 字,大约阅读时间需要 7 分钟。
#include <stdio.h>
#include <malloc.h>typedef struct DuLnode {
int data; struct DuLnode *prior; struct DuLnode *next;}DuLnode,*DuLinkList;//定义双向链表void Create_DuLinkList(DuLinkList &L)
{ L=(DuLinkList)malloc (sizeof(DuLnode)); int j=0; DuLinkList q; q=L; L->prior=NULL; L->next=NULL; printf("请输入链表中的5个元素:"); for(int i=1;i<=5;i++) { DuLinkList p=(DuLinkList)malloc (sizeof(DuLinkList)); p->next=NULL; p->prior=q; q->next=p; scanf("%d",&p->data); q=q->next; j++; }}//初始化双向链表void Print_DuLinkList(DuLinkList L)
{ DuLinkList p=L->next; printf("输出双向链表:"); while(p) { printf("%d ",p->data); p=p->next; }}//输出双向链表void Clear_DuLinkList(DuLinkList L)
{ L->next=NULL;}//将双向链表置空void Empty_DuLinkList(DuLinkList L)
{ if(L->next) printf("双向链表非空/n"); else printf("双向链表空/n");}//判断双向链表是不是空表 int Length_DuLinkList(DuLinkList L){ DuLinkList p=L; int j=0; while (p->next) { p=p->next; j++; } return j;}//求双向链表的长度 void GetElem_DuLinkList(DuLinkList L,int i,int &e){ DuLinkList p=L->next; int j=1;//计数器 while(p&&j<i) { p=p->next; j++; } if(!p||j>i) printf("error/n");//第i个元素不存在 e=p->data;//取第i个元素}//取双向链表中第i个元素 void Delete_DuLinkList(DuLinkList &L,int i,int &e){ DuLinkList p=L->next; int j=1;//计数器 while (p&&j<i-1) { p=p->next; j++; } if(!p||j>i-1) printf("error1/n"); DuLinkList q=p->next; p->next=q->next; q->next->prior=p; e=q->data;//存储删除的元素 free(q);//释放删除的空间}//删除双向链表中第i个元素void Insert_DuLinkList(DuLinkList &L,int i,int e)
{ DuLinkList p=L->next; int j=1; while(p&&j<i-1) { p=p->next; j++; } if(!p||j<i-1) printf("error2/n"); DuLinkList s=(DuLinkList)malloc(sizeof(DuLnode)); s->data=e; s->next =p->next ; p->next->prior =s; s->prior=p; p->next=s;}//在双向链表的第i个元素前插入e int Locate_DuLinkList(DuLinkList L,int e){ DuLinkList p=L->next; int j=1; while(p->data!=e&&p->next) { p=p->next; j++; } if(!p) { printf("无当前元素/n"); return 0; } if(p->data=e) return j; else { printf("无当前元素/n"); return 0; }}//找到元素e的位置
main(){ int a;//表长 int b;//所取元素 int c;//删除元素 int d;//元素6的位置 DuLinkList La;//创建双向链表 Create_DuLinkList(La);//初始化双向链表 Empty_DuLinkList(La);//判断双向链表是不是为空 a=Length_DuLinkList(La);//求双向链表的长度 GetElem_DuLinkList(La,3,b);//取双向链表中的第3个元素 Delete_DuLinkList(La,3,c);//删除第3个元素(出现了未知异常) Insert_DuLinkList(La,3,5);//在第3个元素前插入5 printf("b=%d,c=%d,d=%d",b,c,d);
printf("a=%d",a);
Print_DuLinkList(La); return 0;}转载地址:http://ncmvi.baihongyu.com/