双向链表

来源:互联网 发布:手机淘宝编辑宝贝图片 编辑:程序博客网 时间:2024/05/02 04:31

 #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;
}