线性表(总结3)

来源:互联网 发布:windows cortana如何 编辑:程序博客网 时间:2024/04/30 06:34

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

原创粉丝点击