线性表(总结3)

3、循环链表

     循环链表的特点是表中最后一个结点的指针域指向头结点,从表中任一结点出发均可找到表中其他结点。判断循环链表是否为空,可测试p是否等于头指针。

 

4、双向链表

     在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。在双向链表中,NextElem和PriorElem的执行时间为

O(1)。

 

//--------------------线性表的双向链表存储结构----------------------

typedef int ElemType;
typedef struct DuLNode{
     ElemType data;
     struct DuLNode *prior;
     struct DuLNode *next;
}DuLNode, *DuLinkList;

 

//--------------------带头结点的双链循环性表L中第i个位置之前插入元素e----------------------

//--------------------i的合法值为1 <= i <= 表长+1----------------------

Status ListInsert_DuL(DuLinkList &L, int i, ElemType e){
 DuLNode *s, *p;
 if (!(p = GetElemP_DuL(L, i)))  //在L中确定第i个元素的位置指针p
  return ERROR;
 if (!(s = (DuLinkList)malloc(sizeof (DuLNode))))
  return ERROR;
 s ->data = e;
 s ->prior = p ->prior;
 p ->prior ->next = s;
 s ->next = p;
 p ->prior = s;
 return OK;
}

 

//--------------------删除带头结点的双链循环性表L中第i个元素,i的合法值为1<= i <= 表长----------------------

Status ListDelete_DuL(DuLinkList &L, int i, ElemType &e){
 DuLNode *p;
 if (!(p = GetElemP_DuL(L, i)))  //在L中确定第i个元素的位置指针p
  return ERROR;
 e = p ->data;
 p ->prior ->next = p ->next;
 p ->next ->prior = p ->prior;
 free (p);
 return OK;
}

 

http://download.csdn.net/source/2181836

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值