教你使用双向链表

双向单链表操作

双向链表节点定义

typedef struct List
{
   ElemType data;
   struct List *prior; 
struct List *next;
}linklist;

双向链表创建

linklist *Create (linklist *phead)
{
    linklist *pnew,*ptail;
phead->next =NULL;
phead->prior =NULL;
ptail=phead;
pnew=( linklist *)malloc(sizeof(linklist));  //生成头结点,尾插法
    scanf("%d",& pnew->data);
    while(pnew ->data!=0){
        ptail->next =pnew ;
	   pnew-> prior=ptail;
        ptail=pnew;
        ptail->next =NULL;
pnew=( linklist *)malloc(sizeof(linklist));  //生成头结点,尾插法
        scanf("%d",& pnew->data);
    }
    return phead;
}

双向链表的简单插入

linklist *listinsert(linklist * phead,int i,ElemType e)
{ 
    	//单链表的简单插入
    int j;
    linklist *p,*q;
    q= phead;
    p=(linklist *)malloc(sizeof(linklist));
    if(!p)
      return ERROR;
    p->data=e;
    for(j=0;j<i-1;++j)
    {
      q=q->next;  
    }
p->next=q->next;
q->next->prior=p;
q->next=p;
p->prior=q
    return phead;
}

双向链表的删除

linklist *listdel(linklist * phead,int i)
{ 
   //单链表的删除操作
  int j;
  linklist *p;
  linklist *q;
  p= phead;
  for(j=0;j<i-1;++j)
   {
     p=p->next;
   }
    q=p->next;
   p->next=q->next;
	 q->next->prior=p
   //q->next=NULL;
   free(q);      
   return phead;
}

双向链表合并

linklist *MergeList(linklist *La,linklist *Lb )
{
      //合并单链表
   linklist *Lc;
   linklist *pa,*pb,*pc;
   pa=La->next;pb=Lb->next;
   Lc=pc=La;
    while(pa&&pb)
   {
     if(pa->data<=pb->data)
     {
       pc->next=pa;pc=pa;pa=pa->next;   
     }
     else
     {
       pc->next=pb;pc=pb;pb=pb->next; 
     }
   }
   pc->next=pa?pa:pb;
   return Lc;//返回合并后链表的头指针
}

双向链表显示

Status display(linklist *phead)
{
   linklist *p;
   p=phead->next;
   while(p)
   {
     printf("%d ",p->data);
     p=p->next;
   }
  printf("\n");
  return OK;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

drop in the sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值